好的,我有两个文本文件。
File1是制表符分隔的并且有多个列,特别是它包含一列我要与File2进行比较的值。该文件未以任何方式排序
File2是一列值,即黑名单。它的长度比File1短,但是已经排序。
我想比较这两个列,每个文件一个,如果File1中的任何值与File2匹配,我不想打印该行。
File1中:
col1 col2 col3 col4
val val 34 val
val val 110 val
val val 24 val
val val 300 val
val val 55 val
文件2:
24
34
55
期望的输出:
col1 col2 col3 col4
val val 110 val
val val 300 val
到目前为止,我有这个:
awk -F '\t' '{i =1}NR==FNR{a[$3];next}{if($1 in a){print FNR,i++}}' File1 File2 > output.txt
我有点在黑暗中探索,不知道如何从中得到我需要的东西。谢谢你的帮助。
答案 0 :(得分:1)
使用awk,你需要将file2存储在一个数组中(使用字段作为键,并使用真值1),然后测试处理file1时返回a[$3]
的内容:
awk 'NR==FNR{a[$1]=1;next} !a[$3]' file2 file1
答案 1 :(得分:0)
你可以通过两次sed调用来实现:
s=`sed -r 's+(.*)+/\1/ d+' fv2.txt`
sed "$s" fv1.txt
第一个在$s
中从第二个文件构建一个sed脚本,该脚本在第二个sed调用中使用时会过滤第一个文件中的行。
答案 2 :(得分:0)
awk '
NR == FNR { skip[$1] = 1; next }
$3 in skip { next }
{ print }' File2 File1