微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用comm命令的行号可能吗?

如何解决使用comm命令的行号可能吗?

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

comm -13 file1 file2

它运作完美,并告诉我与众不同。但我也想告诉我行号(第二个文件中唯一的行)。

文件1:

a
d
e
f
g

文件2:

a
b
c
d
e

我愿意:

 comm -13 file1 file2

输出

b
c

但是我需要file2中b和c所在的行号,期望的输出

2
3

解决方法

使用awk:

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

输出:

2
3

编辑:如OP中所述,当文件comm具有重复项时,file2的行为有所不同。下面的解决方案应解决此问题(请参阅评论并感谢@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

例如使用经过修改的file2(其中包括额外的d行)来证明正确处理了重复值:

$ 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。