与 join -v 相反?

与 join -v 相反?

我必须做与 相反的事情join -v1 fileA fileB,它说:打印 fileA 中的第一个字段与 fileB 中任何行的第一个字段不匹配的行。相反,我想写 fileA 中的行(在第一个字段上)与 fileB 中的行一致。

我尝试过 make join -o 1.1 2.1 fileA fileB,但这会重复重合的行,而不是写入第一个文件的行(如果相同)。

最简单的方法是什么?

答案1

饰演 佐藤桂评论了,你可以“欺骗” join 只看到 fileB 中的字段 1,然后要求它进行正常的 join;这会打印 fileA 中的行以及(被欺骗的)fileB 中该行的(空)剩余部分:

join fileA <(awk '{print $1}' fileB)

给定输入文件:

$ cat fileA
1 blah
2 foo
3 bar

$ cat fileB
3 barely
4 baz
5 qux

结果输出是:

$ join fileA <(awk '{print $1}' fileB)
3 bar

通配符指出你可以更直接地做到这一点(避免进程替换),通过将 awk 的输出管道到join

awk '{print $1}' fileB | join fileA -

答案2

如果这两个文件已排序,您可以像这样使用来显示不在其中的comm行:fileAfileB

comm -23 fileA fileB

fileB或者您是否也想要不在其中的行fileA

相关内容