我有两个文件,FL
和FR
,并希望在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
只有一列。
答案 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 }'