文件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
选项-v
ex.
$ 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