2015-09-25 92 views
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

和你想要的输出是...? –

+0

'grep -v -f file2 file1' .....虽然它可能会导致误报 –

+0

@glennjackman有一个很好的观点 - 我可以想象你想要输出什么变化。另外,虽然 - 可以file2包含多个块或始终1?如果file2的第一行是'[b]',输出是什么? –

回答

3

可以使用此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中不可用的值,从而避免重复。