我无法找到真正从另一个文件中减去一个文件的答案。
我的目标是删除一个文件中出现在另一个文件中的行。 应该遵守多次出现,这意味着例如,如果一行在文件A中出现4次而在文件B中只出现一次,则文件C应该有3行。
档案A:
1
3
3
3
4
4
档案B:
1
3
4
文件C(所需输出)
3
3
4
提前致谢
答案 0 :(得分:3)
在awk中:
$ awk 'NR==FNR{a[$0]--;next} ($0 in a) && ++a[$0] > 0' f2 f1
3
3
4
说明:
NR==FNR { # for each record in the first file
a[$0]--; # for each identical value, decrement a[value] (of 0)
next
}
($0 in a) && ++a[$0] > 0' # if record in a, increment a[value]
# once over remove count in first file, output
如果您要打印f1
中不在f2
的商品,可能会丢失($0 in a) &&
:
$ echo 5 >> f1
$ awk 'NR==FNR{a[$0]--;next} (++a[$0] > 0)' f2 f1
3
3
4
5
答案 1 :(得分:1)
如果输入文件已按样本中所示排序,则comm
将更适合
$ comm -23 f1 f2
3
3
4
手册页中的选项说明:
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)
答案 2 :(得分:1)
你可以这样做:
awk 'NR==FNR{++cnt[$1]
next}
cnt[$1]-->0{next}
1' f2 f1