![从文本文件中剪切第 2 列](https://linux22.com/image/7757/%E4%BB%8E%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E5%89%AA%E5%88%87%E7%AC%AC%202%20%E5%88%97.png)
我的文本文件没有分隔符来指定分隔符,只是空格,如何将第 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