在使用统计软件阅读之前,我正在使用awk过滤大文本文件中的有趣行。 这是一些虚拟数据
printf 'VEGETABLE_NAME,RECIPE_NAME,OBSCURE_CODE\ncarrot,cake,1\ncarrot,soup,1\npotato,cake,2\nspinach,soup,1' > dummydata.dat
我设法:
更改列标题
$ awk -F, 'NR==1 {$0="vegetable,recipe,code"} 1' dummydata.dat
vegetable,recipe,code
carrot,cake,1
carrot,soup,1
potato,cake,2
spinach,soup,1
过滤产品代码1
$ awk -F, '$3 ~ /^1/' dummydata.dat
carrot,cake,1
carrot,soup,1
spinach,soup,1
但是当我尝试组合两个命令时,结果不包括列标题:
$ awk -F, 'NR==1 {$0="vegetable,recipe,code"} $3 ~ /^1/' dummydata.dat
carrot,cake,1
carrot,soup,1
spinach,soup,1
答案 0 :(得分:2)
在您的方法中,您没有获得列标题,因为它将打印行 仅根据条件
$3 ~ /^1/
如果评估为真(1)
,则打印其他(0)
。不幸的是,它会为标题评估false。
以下是我的尝试
awk -v FS="," 'BEGIN{print "vegetable,recipe,code"}NR>1 && $3==1'
vegetable,recipe,code
carrot,cake,1
carrot,soup,1
spinach,soup,1
答案 1 :(得分:2)
您为$0
设置NR==1
,但该记录永远不会在任何地方打印。
您可以对脚本进行一些小改动:
awk -F, 'NR==1{print "vegetable,recipe,code"} $3 ~ /^1$/' dummydata.dat
vegetable,recipe,code
carrot,cake,1
carrot,soup,1
spinach,soup,1