【发布时间】:2017-07-17 14:04:57
【问题描述】:
我正在使用 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
【问题讨论】:
-
第一个代码中的
1打印$0...您尝试的组合,$0已分配但未打印...当满足$3 ~ /^1/条件时,$0是打印...一个简单的更改应该可以工作...awk -F, 'NR==1 {print "vegetable,recipe,code"} $3 ~ /^1/' -
也用于字符串比较,只需使用
$3 == "1"不需要正则表达式..$3 ~ /^1/将匹配11或10asad等等.. -
对不起,我不打算劫持您的问题,想知道这是否可以通过 grep 您想要的内容并在保存到另一个文件时添加标题来实现?
-
@Sundeep 我实际上需要一个正则表达式来处理原始的、更复杂的数据集,但当然有了这个简单的示例字符串比较就足够了。
-
@UlugToprak
awk在字段分隔数据中搜索匹配项时更易于使用