bash - 带有 comm 命令的行号。是否可以?

标签 bash awk compare comm

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

comm -13 file1 file2
它工作得很好,并告诉我差异。但我还想向我展示行号(在第二个文件中唯一的行)。
文件 1:
a
d
e
f
g
文件2:
a
b
c
d
e
我愿意:
 comm -13 file1 file2
输出
b
c
但我需要 b 和 c 在 file2 中的行号,所需的输出:
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
希望不会有更多的陷阱等待...

关于bash - 带有 comm 命令的行号。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63978033/

相关文章:

linux - 在 Linux 中从文件末尾开始在一列中添加数字

visual-c++ - 比较两个包含版本号的 CString

pandas - 使用 Pandas 比较两列中的值

linux - 如何在其他目录下创建同名目录?

bash - 当我使用 'sh' 运行 Bash 代码时,为什么它会失败?

php - 用特殊字符替换字符串

java - Javers 比较不同顺序的列表

bash - 在 bash 中,如何将功能键绑定(bind)到命令?

linux - 如何选择大型文本文件中包含特定文本字符串的所有行

linux - 当我使用 >> 时 awk 不打印到文件