mat*_*ata 22
man join:
NAME
join - join lines of two files on a common field
SYNOPSIS
join [OPTION]... FILE1 FILE2
Run Code Online (Sandbox Code Playgroud)
它只适用于两个文件.
如果你需要加入三个,也许你可以先加入前两个,然后加入第三个.
尝试:
join file1 file2 | join - file3 > output
Run Code Online (Sandbox Code Playgroud)
应该加入三个文件而不创建中间临时文件.-告诉join命令从中读取第一个输入流stdin
ack*_*ack 11
可以通过join递归地构造s 的管道来连接多个文件(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
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但供将来参考.如果您知道要加入的文件具有类似问题的模式,例如,file1 file2 file3 ... fileN
那么您可以使用此命令简单地加入它们
cat file* > output
Run Code Online (Sandbox Code Playgroud)
其中输出将是按字母顺序连接的一系列连接文件.
我为此创建了一个函数。第一个参数是输出文件,其余参数是要连接的文件。
function multijoin() {
out=$1
shift 1
cat $1 | awk '{print $1}' > $out
for f in $*; do join $out $f > tmp; mv tmp $out; done
}
Run Code Online (Sandbox Code Playgroud)
用法:
multijoin output_file file*
Run Code Online (Sandbox Code Playgroud)