想要将f11.txt和f22.txt的第一个字段($ 1)与f33.txt的第一个字段($ 1)进行比较,然后打印non-matching line items from f33.txt
f11.txt
a,b
c,d
f22.txt
a,b
x,x
f33.txt
a,b
z,z
尝试过以下命令和完整
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} !($1 in a) {print $0}' f11.txt f22.txt f33.txt
f33.txt的预期输出:
z,z
想要将f11.txt,f22.txt,f33.txt的第一个字段($ 1)与f44.txt的第一个字段($ 1)进行比较,然后打印non-matching line items from f44.txt
其中f44.txt
m,n
x,y
b,a
尝试过以下命令和完整
awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} !($1 in a) {print $0}' f11.txt f22.txt f33.txt f44.txt
f44.txt的预期输出:
m,n
b,a
寻找你的建议!!
答案 0 :(得分:4)
这里有两种可能性:
首先阅读f33.txt
,存储行,并为每个后续文件删除存储的行
awk -F, '
NR==FNR {f33[$1]=$0; next}
$1 in f33 {delete f33[$1]}
END {for (key in f33) print f33[key]}
' f33.txt f11.txt f22.txt
使用参数
中的最后一个文件名检查当前文件awk -F, '
FILENAME != ARGV[ARGC-1] {keys[$1]; next}
!($1 in keys)
' f11.txt f22.txt f33.txt