20

標準の結合コマンドを使用して、column1 に基づいて 2 つの並べ替えられたファイルを結合しています。コマンドは単純な結合 file1 file2 > output_file です。

しかし、同じ手法を使用して 3 つ以上のファイルを結合するにはどうすればよいでしょうか? join file1 file2 file3 > output_file 上記のコマンドで空のファイルが得られました。sed が役立つと思いますが、どうすればよいかわかりません。

4

8 に答える 8

31

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

于 2012-05-23T19:24:06.083 に答える
12

joins のパイプラインを再帰的に構築することにより、複数のファイル (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
于 2013-07-15T07:46:57.210 に答える
8

これは古い質問ですが、今後の参考のために。結合したいファイルがここの質問のようなパターンを持っていることがわかっている場合は、たとえばfile1 file2 file3 ... fileN 、このコマンドでそれらを結合できます

cat file* > output

出力は、アルファベット順に結合された一連の結合ファイルになります。

于 2015-06-22T12:08:56.717 に答える
3

manページにjoinは、2 つのファイルに対してのみ機能すると記載されています。したがって、後で削除するファイルを作成して中間にする必要があります。

> join file1 file2 > temp
> join temp file3 > output
> rm temp
于 2012-05-23T19:23:58.220 に答える
0

Join は、 2 つのファイルの行を共通のフィールドで結合します。もっと参加したい場合は、ペアで行ってください。最初の 2 つのファイルを最初に結合し、次に結果を 3 番目のファイルと結合します。

于 2012-05-23T19:23:35.187 に答える