从文本文件中剪切第 2 列

ril*_*ley 23 text-processing cut columns

我的文本文件没有分隔符来指定分隔符只是空格,我如何切出第 2 列以输出文件,

39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0
Run Code Online (Sandbox Code Playgroud)

所以我需要的输出是

207
412
432
Run Code Online (Sandbox Code Playgroud)

jim*_*mij 19

最简单的方法awk是将多个连续空格视为一个空格,因此

awk '{print $2}' file
Run Code Online (Sandbox Code Playgroud)

印刷

207
412
431
Run Code Online (Sandbox Code Playgroud)

但显然有很多很多其他工具可以完成这项工作,甚至不是为这样的任务设计的grep

grep -Po '^[^ ]+[ ]+\K[^ ]+' file
Run Code Online (Sandbox Code Playgroud)


小智 15

使用管道挤压额外的空格并将您的数据(例如, in columns.txt)发送到cut

tr -s ' ' < columns.txt | cut -d" " -f2
Run Code Online (Sandbox Code Playgroud)

在您提供的示例数据中,单个空格分隔符将您想要的数据放在字段 5 中。但是,如果第一列是数字并且有前导空格以使其向右对齐,则需要调整字段编号。用tr -s ' 'first压缩空格避免了处理这个问题。

将该输出发送到另一个文件使用重定向:

tr -s ' ' < columns.txt | cut -d" " -f2 > field2.txt
Run Code Online (Sandbox Code Playgroud)

使用 awk 命令,您可以执行以下操作,它会自动识别您所关注的字段,因为那里有数据(?)我需要了解有关 awk 的更多信息。

awk -F' ' '{print $2}' columns.txt
Run Code Online (Sandbox Code Playgroud)


小智 0

您仍然可以使用单个空格作为分隔符,只是会有更多列。将您给出的值cut -d' ' -f从 2 增加到 5,或者可能是 6。增加数字,直到获得所需的结果。