使用awk或cut或perl选择特定列

jav*_*ved 16 unix perl awk sed

我需要从制表符分隔文件中选择第7列.例如:

cat filename | awk '{print $7}'
Run Code Online (Sandbox Code Playgroud)

问题是第4列中的数据有多个值,中间有空白.示例 - 以下输出中的最后一行:

user  \Adminis FL_vol Design         0         -       1       -
group        0 FL_vol Design   19324481         -    3014       -
user      \MAK FL_vol Design   16875161         -    2618       -
tree       826 FL_vol Out Global Doc Mark     16875162         -    9618       - /vol/FL_vol/Out Global Doc Mark
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 18

如果数据明确地以制表符分隔,那么cut将剪切选项卡,而不是空格:

cut -f7 filename
Run Code Online (Sandbox Code Playgroud)

你当然也可以这样做awk:

awk -F'\t' '{ print $7 }'
Run Code Online (Sandbox Code Playgroud)


yst*_*sth 5

如果字段由制表符分隔,并且您担心某些字段包含空格,则此处没有问题,只需:

cut -f 7
Run Code Online (Sandbox Code Playgroud)

(剪切默认为制表符分隔的字段.)


sam*_*hen 4

根据输入文件的格式判断,您可以使用分隔符-代替空格:

awk 'BEGIN{FS="-"} {print $2}' filename
Run Code Online (Sandbox Code Playgroud)
  • FS代表字段分隔符,只需将其视为输入的分隔符即可。
  • 鉴于我们现在在 上进行定界-,您之前的第 7 个字段现在变成了第 2 个字段。
  • 拯救一只猫!而是将输入文件指定filename为 awk 的参数。

或者,如果您的数据字段由制表符分隔,您可以更明确地执行以下操作:

awk 'BEGIN{FS="\t"} {print $7}' filename
Run Code Online (Sandbox Code Playgroud)

这将解决问题,因为Out Global Doc Mark看起来是用空格分隔的。