【发布时间】:2020-11-11 16:47:01
【问题描述】:
我正在寻找这个问题的最佳答案的修改版本:
extracting unique values between 2 sets/files
awk 'FNR==NR {a[$0]++; next} !($0 in a)' file1 file2
我如何通过对字段一而不是整行进行重复数据删除来完成同样的事情?
文件格式如下:
blah@domain.com,Elon,Tusk
我只想输出文件 2 中包含文件 1 独有的电子邮件的行。
理想的解决方案是允许多个文件,而不是只有 2 个,所有文件都与之前的文件重复,因此您可以这样做:
awk .... file1 file2 file3 file4 file5 file6
并以某种方式输出 6 个新文件,其中包含只有唯一第一个字段的行到它之前的所有其他文件
但是,如果这太复杂了,只处理 2 个文件也可以
【问题讨论】:
-
@kvantour 如果您不介意解释它是如何工作的,会很高兴吗?
-
根据您的输入文件,您似乎有一系列逗号和空格作为分隔符,因此我们将其用作字段分隔符
FS。我们现在只选择file1中提到的第一个字段($1),所以我们可以这样做:awk 'BEGIN{FS="[ \t,]+"}{a[$1]; next}!($1 in a)' file1 file2。也不需要做a[$1]++,a[$1]就足够了,只需在数组a中创建一个条目。没有必要计算遇到$1的次数,因为您对它不感兴趣。 (注意这仅适用于一个文件) -
@kvantour 空格是错误的,抱歉我已经修复了,文件中没有空格