我有一个看起来像这样的文本文件:
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将所有单词打印到第一个数字,因为它会切断部分行。
答案 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