0
我需要从文件1中删除重复值与文件2比较。当我试图这样做时,我面临的问题,因为文件2(c,g)中的值也在文件1中的[b]下,这些也被删除。但我的要求是只删除[a]下的那些。感谢比较2个文件并删除重复行只有一次
$ less file 1
[a]
c
g
d
[b]
c
g
h
和
$ less file 2
[a]
c
g
d
我需要从文件1中删除重复值与文件2比较。当我试图这样做时,我面临的问题,因为文件2(c,g)中的值也在文件1中的[b]下,这些也被删除。但我的要求是只删除[a]下的那些。感谢比较2个文件并删除重复行只有一次
$ less file 1
[a]
c
g
d
[b]
c
g
h
和
$ less file 2
[a]
c
g
d
可以使用此awk命令:
awk '/^\[.*?\]/{s=$0} FNR==NR{seen[s,$0]++; next} !seen[s,$0]' file2 file1
[b]
c
g
h
这AWK是使用关联数组seen
用的值内[...]
和复合键以后的所有记录即s,$0
通过file2时,它将这些值保存在数组中,并在遍历file1时将只打印那些在seen
中不可用的值,从而避免重复。
和你想要的输出是...? –
'grep -v -f file2 file1' .....虽然它可能会导致误报 –
@glennjackman有一个很好的观点 - 我可以想象你想要输出什么变化。另外,虽然 - 可以file2包含多个块或始终1?如果file2的第一行是'[b]',输出是什么? –