我有一个数据文件,我需要根据第一个字段的值(第0列0列)进行过滤。例如,使用此数据:
123 test1
123 test2
321 test3
321 test4
451 test5
我需要生成此输出:
123 test1
123 test2
所以我需要一些方法来存储第一个字段并在awk
中匹配它。问题是每行都运行awk
代码,因此始终会覆盖变量。切割第一个字段的解决方案是将其存储在变量中并与awk
中的变量匹配吗?如果是这样,你能提供一个例子吗?
此代码存在的问题是它没有打印第一个匹配项,它会更新field
,以便打印其他不需要的匹配项。
awk -F" " '
$1 == field {
print;
}
$1 != field {
field = $1
}
' data.txt > awkOutput.txt
答案 0 :(得分:0)
awk
的默认字段分隔符是空格序列,因此您无需设置-F" "
。由于您只对第一行的第一个字段感兴趣,请使用包含行号的NR
变量。
以下awk
单行代码可满足您的需求:
$ awk 'NR==1{ field = $1 }$1==field' file
123 test1
123 test2
NR==1
是仅为第一行执行的模式。我们将变量field
设置为$1
。下一个模式检查第一列是否等于我们的变量。如果匹配,则返回真值。在awk
中,真值会触发该行的默认打印。
答案 1 :(得分:0)
如果不必在awk中完全完成,我建议这样的事情:
grep "^`head -1 data.txt | awk '{print $1}'`" data.txt > Output.txt
答案 2 :(得分:0)
我不确定这是否会有所帮助,但你也可以试试这个:
awk 'BEGINs{FS=" "} $1=="123" {printf( "%s\t%s\n", $1, $2)}' input.txt
如果第一个字段匹配“123”(即$ 1 ==“123”),输出将打印第一个和第二个字段(中间有一个标签(即\ t)),它将开始一个新行(即\ n)。