有两个文件file1
和file2
,这两个文件都包含一些相似的数据。其中文件1具有一些文件2中不存在的额外数据。我正在尝试打印那些额外的数据
下面的awk解决方案将只打印来自file1
和file2
的匹配数据。我需要一些存在于文件1中但不存在于文件2中的数据。
awk 'NR==FNR{patts[$1]=$2;next}{for (i in patts) if (($0 ~ i) && ($0 ~ patts[i])) print}' file2 file1
file1
papaya
apple
Moosumbi
mango
jackfruit
kiwi
orange
strawberry
banana
grapes
dates
file2
apple
mango
kiwi
strawberry
预期结果:-
papaya
Moosumbi
jackfruit
orange
banana
grapes
dates
命令diff就是为了这个目的。刚刚发布:
diff --changed-group-format='%<' --unchanged-group-format='' file1 file2
你会得到预期的结果:
papaya
Moosumbi
jackfruit
orange
banana
grapes
dates
这对我有效
awk -F, 'FNR==NR {f2[$1];next} !($0 in f2)' file2 file1
这意味着条件FNR==NR仅适用于第一个文件,因为对于每个文件的第一行,FNR重置回1,但NR继续增加。
f2[$1]本身的唯一目的是创建由$1索引的数组元素,即使我们没有为它分配任何值。在传递第一个文件2的过程中,所有看到的行都被记住为数组f2的索引。对第二个文件1的传递只需要检查被读取的每一行是否都不作为索引存在于数组f2中[这就是条件!($0 in f2)
的作用]。如果条件为true,则打印从文件2中读取的行。
条件FNR==NR比较与NR==FNR相同的两个操作数,因此其行为方式相同。