join多个文件

我正在使用标准连接命令来join两个基于column1sorting的文件。 该命令是简单的joinfile1 file2> output_file。

但是,如何使用相同的技术join3个或更多文件? joinfile1 file2 file3> output_file上面的命令给了我一个空文件。 我认为sed可以帮助我,但我不太清楚如何?

Solutions Collecting From Web of "join多个文件"

man join

 NAME join - join lines of two files on a common field SYNOPSIS join [OPTION]... FILE1 FILE2 

它只适用于两个文件。

如果你需要加入三个,也许你可以先加入前两个,然后加入第三个。

尝试:

 join file1 file2 | join - file3 > output 

应该加入这三个文件而不创建一个中间临时文件。 -告诉连接命令从stdin输入读取第一个输入流

可以通过递归地构建join管道来连接多个文件(N> = 2):

 #!/bin/sh # multijoin - join multiple files join_rec() { if [ $# -eq 1 ]; then join - "$1" else f=$1; shift join - "$f" | join_rec "$@" fi } if [ $# -le 2 ]; then join "$@" else f1=$1; f2=$2; shift 2 join "$f1" "$f2" | join_rec "$@" fi 

我知道这是一个老问题,但供将来参考。 如果你知道你想要加入的文件有一个模式就像在这里的问题,例如file1 file2 file3 ... fileN然后你可以简单地加入这个命令

 cat file* > output 

输出将是按字母顺序连接的一系列连接文件。

join man页说明它只适用于两个文件。 所以你需要创建和中间文件,你之后删除,即:

 > join file1 file2 > temp > join temp file3 > output > rm output 

我为此创建了一个函数。 第一个参数是输出文件,其余参数是要连接的文件。

 function multijoin() { out=$1 shift 1 cat $1 | awk '{print $1}' > $out for f in $*; do join $out $f > tmp; mv tmp $out; done } 

用法:

 multijoin output_file file* 

加入共同字段中的两个文件的连接线。 如果你想加入更多 – 成对的做。 首先加入前两个文件,然后将结果与第三个文件加入