带有命令的行号.有可能吗



我用这个命令比较两个文件

comm -13 file1 file2

它工作得很好,告诉我不同之处。但我也想给我看行号(第二个文件中唯一的行(。

文件1:

a
d
e
f
g

文件2:

a
b
c
d
e

我知道:

comm -13 file1 file2

输出

b
c

但我需要文件2中b和c所在的行号,所需输出:

2
3

使用awk:

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

输出:

2
3

编辑:如OP所示,当文件file2重复时,comm的行为会有所不同。下面的解决方案应该可以解决这个问题(见评论和感谢@EdMorton(:

$ awk '
NR==FNR {
a[$0]++
next
}
{
if(!($0 in a)||a[$0]<=0)
print FNR
else a[$0]--
}' file1 file2

现在输出(file2有一个重复的条目d,其中FNR==5(:

2
3
5

希望没有那么多陷阱在等待。。。

awk 'NR==FNR{a[$0]++; next} (--a[$0]) < 0{print FNR}' file1 file2

例如,使用包括额外d行的修改后的file2来证明重复值被正确处理:

$ cat file2
a
b
c
d
d
e

$ comm -13 file1 file2
b
c
d

$ awk 'NR==FNR{a[$0]++; next} (--a[$0]) < 0' file1 file2
b
c
d

$ awk 'NR==FNR{a[$0]++; next} (--a[$0]) < 0{print FNR}' file1 file2
2
3
5

相关内容

  • 没有找到相关文章

最新更新