将两个分隔文件与第一列进行比较

将两个分隔文件与第一列进行比较

文件1

james:hello
richard:hello2
johnson:hello3
jam3es:hello
ja1mes:hello

文件2

james:hello
ja1mes:hello
johnson:hello3

预期产出

richard:hello2
jam3es:hello

我有这两个文件,我试图将第一列(也称为名称)与其他文件名进行比较,并从 File1 中打印出唯一的行。

答案1

这些文件似乎没有在我能想象的任何区域设置的第一列上排序,但如果您对它们进行排序,那么您可以轻松地使用join选项-vex.

$ join -t ':' -v 1 <(sort -t ':' file1) <(sort -t ':' file2)
jam3es:hello
richard:hello2

如果您确实需要按照给定的顺序输出,那么您可以将结果通过管道传递给另一个sort命令。

答案2

awk 提供了一个简洁的解决方案

awk -F: '
    NR == FNR {name[$1]; next}
    !($1 in name)
' file2 file1

输出

richard:hello2
jam3es:hello

示例输入文件显示整行都是重复的。如果确实如此,那么该comm实用程序很方便:

comm -23 <(sort file1) <(sort file2)

输出仅出现在文件 1 中的行(选项-2抑制仅出现在文件 2 中的行,并-3抑制公共行)

jam3es:hello
richard:hello2

相关内容