awk 使用另一个文件的行号过滤文件的内容

awk 使用另一个文件的行号过滤文件的内容

我正在尝试awk根据另一个文件的内容过滤文件中的某些内容。但它不起作用。

我有两个文件,orig_data 和 noghest_data。两个文件具有相同的行数,并且行对应于相同的事件但内容不同。我想打印 noghest_data 的内容,该内容对应于 orig_data 不以Ghest.我的下面的代码不起作用。它打印所有内容。

awk -F " "  'NR==FNR{if($0 ~ /^Ghest/) {line[NR]++} next} !(NR in line) {print $0}' orig_data.txt noghest_data.txt

答案1

你的剧本几乎没问题。稍微简化一下:

awk 'NR == FNR && /^Ghest/ {line[NR]} NR > FNR && ! (FNR in line)' \
  orig_data.txt noghest_data.txt

第一个模式 ( NR == FNR && /^Ghest/) 仅对于第一个输入文件中也以该字符串开头的行计算结果为 true Ghest。相应的操作将当前行号添加为数组的索引line

NR > FNR && ! (FNR in line)对于第一个模式以外的输入文件,第二个模式 ( ) 的计算结果为 true,如果相对于当前文件的行号不是数组的索引lineprint $0省略该操作时是默认操作)。

作为埃德·莫顿 建议NR,这也可以通过仅比较一次来提高效率FNR

awk 'NR == FNR { if (/^Ghest/) line[NR]; next } !(FNR in line)'

相关内容