首页 > 解决方案 > 用awk提取2个文件之间的唯一值

问题描述

比较 2 个文件时,我需要获取 uniq 行。这些文件包含字段分隔符“:”,在比较字符串时应将其视为行尾。

file1 包含这些行

apple:tasty
apple:red
orange:nice
kiwi:awesome
kiwi:expensive
banana:big
grape:green
orange:oval
banana:long

file2 包含这些行

orange:nice
banana:long

输出文件应该是(2 次出现的橙色和 2 次出现的香蕉被删除)

apple:tasty
apple:red
kiwi:awesome
kiwi:expensive
grape:green

所以 : 之前的唯一字符串应该进行比较

是否可以在 1 个命令中完成此任务?

我试图以这种方式完成任务,但字段分隔符在这种情况下不起作用。

awk -F: 'FNR==NR {a[$0]++; next} !a[$0]' file1 file2 > outputfile

标签: bashawk

解决方案


你基本上有它,但是$0当你只想处理第一个字段时,指的是整行,即$1.

您还需要注意输入文件的顺序。要使用 file2 中的值来决定从 file1 中包含哪些行,请首先处理 file2:

$ awk -F: 'FNR==NR {a[$1]++; next} !a[$1]' file2 file1
apple:tasty
apple:red
kiwi:awesome
kiwi:expensive
grape:green

推荐阅读