Unix *nix join(1)命令及其输出列顺序
我有两个文件,Unix *nix join(1)命令及其输出列顺序,unix,Unix,我有两个文件,FL和FR,希望在FL中选择与下面的连接条件匹配的行。但是,的输出修改了FL的布局。有没有办法保证连接的输出将具有与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只有一列。的POSIX规范规定: 默认情况下,输出行应包括连接字段,然
FL
和FR
,希望在FL
中选择与下面的连接条件匹配的行。但是,的输出修改了FL
的布局。有没有办法保证连接
的输出将具有与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
只有一列。的POSIX规范规定:
默认情况下,输出行应包括连接字段,然后是文件1中的剩余字段,然后是文件2中的剩余字段。可以使用-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 }'
因为确实有一个栏目需要重新定位,所以我提出了一些重新定位第一个栏目的想法。这些想法或多或少与我的建议相当。主要区别在于,那里的代码实际上可能会更准确地保留列之间的间距,尽管有一些警告,但这可能不是您的主要问题。