【发布时间】:2014-12-24 21:34:08
【问题描述】:
想将 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
寻求您的建议!!
【问题讨论】:
-
nash_ag ,上面的链接仅用于比较两个文件,所以我的问题不是重复一个...
-
你可以(在第一种情况下)从
cat f11 f22 > f11_22开始,然后使用该技术比较两个文件吗? -
使用 awk 链接比较多个文件和列与上述问题不相似...
-
Jas ,我这样做只是因为 Step1 是 cat f11 f22> f11_22 然后 Step2 是 f11_f22 vs f33 ,好奇要了解避免两个步骤...
-
为避免两个步骤,您需要 awk 从前 n-1 个文件构建索引,然后仅从第 n 个(最后一个)文件打印不匹配的行。 (您当前的 awk 仅从第一个文件构建索引。)