使用AWK检查file1中的列对文件2

时间:2016-01-13 16:20:32

标签: awk

我在使用AWK比较一个文件的内容与另一个文件时遇到了一些困难。

FILE1.TXT

142317216-|--|-tree-|-apple-|-|--
150232802-|--|-plant-|-sugar-|-granular|--
153947334-|--|-flower-|-daisy-|-single|--
153188646-|--|-soil-|-earth-|-|--

File2.txt

apple,99817
sugar,75844
daisy,34566
earth,75544

使用“ - ”作为分隔符,我可以从第7列中提取信息。

awk 'BEGIN { FS="-";}  {print $7;}' file1.txt 

输出

apple
sugar
daisy
earth

我的完整命令检查file1,txt中的column7是否存在于file2.txt。

awk 'BEGIN {FS="-";} NR==FR{a[$1]=$7;next} {FS=",";} $1 in a ' file1.txt file2.txt 

获取column7,然后将分隔符更改为“,”并针对变量a检查$ 1。

这显示没有结果,我正在努力理解语法以理解原因。可能有人可能会给我一些指示。

1 个答案:

答案 0 :(得分:4)

您没有显示您期望的输出,并且您没有在文件中包含不匹配(或重复)的值,所以它可以猜测,但这可能是您想要的:

$ awk 'NR==FNR{file2[$1];next} {print ($7 in file2 ? "present:" : "absent:"), $7}' FS=',' file2 FS='-' file1
present: apple
present: sugar
present: daisy
present: earth

这种情况是可以在文件列表中设置变量的一个原因 - 更改文件之间的值。

由于你刚刚开始学习awk - 请阅读Arnold Robbins撰写的有效Awk编程,第4版。