awk:将所有空间计算到第二列作为单个变量?

时间:2016-07-07 14:39:30

标签: bash awk

我有一个看起来像这样的文本文件:

This is the first line    80 55 75%
Second line               25 95 74%  
The next line             50 50 50%

如您所见,在左侧,单词数量会有所不同。目前,如果我使用这样的命令:

awk 'NR == 1 {print $1,$2,$3,$4}' file

这对于第一行很有用,并将返回:

This is the first line

但如果我在第二行上这样做:

awk 'NR == 2 {print $1,$2,$3,$4}' file

我按照预期得到了这个:

Second line 25 95

但这不是我需要的。出于脚本目的,我需要awk,或者可能是另一种工具来“查看”第二列数字作为单个变量。因此,无论左侧的单词数量如何,它们将始终被视为单个变量。我怎样才能做到这一点?

注意:我可能有这样的行:

This is a testmarket001    65 45 25%

所以我认为你不能告诉awk将所有单词打印到第一个数字,因为它会切断部分行。

2 个答案:

答案 0 :(得分:1)

如果每行末尾总共有3个空格分隔单词,您可以使用此awk来获取输出:

awk '{gsub(/(\s+\S+){3}\s*$/, "")} 1' file

This is the first line
Second line
The next line

您也可以使用sed

sed -E 's/(\s+\S+){3}\s*$//' file

答案 1 :(得分:1)

如果您的字段是制表符分隔的,只需设置awk

的分隔符即可
$ paste file1 file2 file3 | awk -F'\t' '{print $1}' 

应该有用。

请注意,column命令会修改选项卡。如果您的文件在column格式化后保存,则可以尝试此

$ awk '{for(i=1;i<NF-2;i++) printf "%s ",$i; print ""}' file

This is the first line
Second line
The next line