需要比较两个文件并仅在第一个文件中删除记录(如果匹配)

时间:2017-11-24 04:17:59

标签: shell unix

我需要比较两个文件并仅在第一个文件中删除记录(如果它的当前匹配)。我使用了awk命令,我可以打印记录,但是我需要从第一个文件中删除记录,这两个文件中都有这个记录。

代码:

awk 'NR==FNR{a[$0];next}$0 in a{print $0}' File1 File2

请有人帮我解决此问题。

2 个答案:

答案 0 :(得分:0)

  

需要比较两个文件并仅在第一个文件中删除记录   匹配

您需要进行小修改

  • 首先将您的第二个文件存储在数组a

  • 然后读取您的第一个文件,如果第一个文件中的数组a print $0中不存在行(意味着文件2中不存在记录)

它可以是

awk 'NR==FNR{a[$0];next}!($0 in a){print $0}' File2 File1

或者只是

awk 'NR==FNR{a[$0];next}!($0 in a)' File2 File1

答案 1 :(得分:0)

grep + comm 解决方案:

示例file1内容:

111
222
a/aa
333/
bb/b

示例file2内容:

333/
sss
ccc
a/aa
bb/b
fff

工作:

grep -vxf <(comm -12 <(sort file1) <(sort file2)) file1 > tmp_f && mv tmp_f file1

最终file1内容:

111
222