Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix *nix join(1)命令及其输出列顺序_Unix - Fatal编程技术网

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 }'

因为确实有一个栏目需要重新定位,所以我提出了一些重新定位第一个栏目的想法。这些想法或多或少与我的建议相当。主要区别在于,那里的代码实际上可能会更准确地保留列之间的间距,尽管有一些警告,但这可能不是您的主要问题。