標準の結合コマンドを使用して、column1 に基づいて 2 つの並べ替えられたファイルを結合しています。コマンドは単純な結合 file1 file2 > output_file です。
しかし、同じ手法を使用して 3 つ以上のファイルを結合するにはどうすればよいでしょうか? join file1 file2 file3 > output_file 上記のコマンドで空のファイルが得られました。sed が役立つと思いますが、どうすればよいかわかりません。
man join
:
NAME
join - join lines of two files on a common field
SYNOPSIS
join [OPTION]... FILE1 FILE2
2 つのファイルでのみ機能します。
3 つに参加する必要がある場合は、最初の 2 つに参加してから、3 つ目に参加することもできます。
試す:
join file1 file2 | join - file3 > output
中間一時ファイルを作成せずに 3 つのファイルを結合する必要があります。-
最初の入力ストリームを読み取るように結合コマンドに指示しますstdin
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
これは古い質問ですが、今後の参考のために。結合したいファイルがここの質問のようなパターンを持っていることがわかっている場合は、たとえばfile1 file2 file3 ... fileN
、このコマンドでそれらを結合できます
cat file* > output
出力は、アルファベット順に結合された一連の結合ファイルになります。
のman
ページにjoin
は、2 つのファイルに対してのみ機能すると記載されています。したがって、後で削除するファイルを作成して中間にする必要があります。
> join file1 file2 > temp
> join temp file3 > output
> rm temp
Join は、 2 つのファイルの行を共通のフィールドで結合します。もっと参加したい場合は、ペアで行ってください。最初の 2 つのファイルを最初に結合し、次に結果を 3 番目のファイルと結合します。