从文本文件中剪切第 2 列

从文本文件中剪切第 2 列

我的文本文件没有分隔符来指定分隔符,只是空格,如何将第 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

所以我需要的输出是

207
412
432

答案1

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

awk '{print $2}' file

印刷

207
412
431

但显然还有很多很多其他工具可以完成这项工作,甚至有些不是为此类任务设计的,例如 (GNU) grep

grep -Po '^[^ ]+[ ]+\K[^ ]+' file

答案2

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

tr -s ' ' < columns.txt | cut -d" " -f2

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

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

tr -s ' ' < columns.txt | cut -d" " -f2 > field2.txt

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

awk -F' ' '{print $2}' columns.txt

答案3

man cut

 -w      Use whitespace (spaces and tabs) as the delimiter.  Consecutive
         spaces and tabs count as one single field separator.

壳:

% cat $$
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
% cut -w -f2 $$
207
412
431
%

答案4

使用珀尔

perl -lane 'print $F[1];' 

使用(以前称为 Perl_6)

raku -ne 'put .words[1];' 

看:
https://unix.stackexchange.com/a/109894/227738
https://unix.stackexchange.com/a/555394/227738
https://unix.stackexchange.com/a/701811/227738

相关内容