* nix join(1)命令及其输出列顺序

时间:2014-08-19 23:06:41

标签: unix

我有两个文件,FLFR,并希望在FL中选择与下面的加入条件匹配的行。但是join(1)的输出会修改FL的布局。有没有办法保证join的输出与FL具有相同的布局(例如列顺序)?

 FL:
 a 1 1 u
 b 2 2 v
 c 3 3 w

 FR:
 2

 join -1 2 -2 1 FL FR

输出:

 2 b 2 v

我希望

 b 2 2 v

或换句话说,与FL匹配连接条件的确切行。在“现实生活中”,文件FL包含许多列,而FR只有一列。

1 个答案:

答案 0 :(得分:2)

join的POSIX规范说:

  

默认情况下,输出行应包含连接字段,然后是 file1 中的其余字段,然后是 file2 中的其余字段。可以使用-o选项更改此格式。

因此,字段的顺序可以通过-o选项显式指定,也可以隐含地指定。

在您的示例中,您需要指定-o选项:

join -1 2 -2 1 -o "1.1 1.2 1.3 1.4" FL FR

如果FL中有多个字段,则需要将它们全部列出 - 除非您可以不同方式排列列。例如,您可以对输出进行后处理:

join -1 2 -2 1 FL FR | awk '{ t=$1;$1=$2;$2=t; print }'