接続の問題:エラーが発生し、追加のオペランド接続

接続の問題:エラーが発生し、追加のオペランド接続

一意の値がソートされていて(ファイルに1つの値列しかないにもかかわらず)、同じプレフィックス(たとえば「usi」)で始まる列に3つのファイルを結合したいと思います。

今私がするとき

join -j 1 ../Test_Data/usi* > ../Test_Data/join_output.txt

次のエラーが見つかりました。

join: extra operand `usi_rtree_lw_100000.txt'
Try `join --help' for more information.

どんなアイデアがありますか?

答え1

join登録するには、2つのファイルのみを受け入れてください。 3つのファイルを操作するには、2回の呼び出しを使用する必要がありますjoin

join -j 1 <(join -j 1 ../Test_Data/usi-1 ../Test_Data/usi-2) ../Test_Data/usi-3 > ../Test_Data/join_output.txt

bashプロセス置換を使用するため、上記のコマンドが必要です。別のシェルを使用する場合は、どのシェルを指定してください。

修正するコメントに基づいています。
ファイル名パターンのみを知っていて正確なファイル名がわからない場合は、シェルでパターンを展開し、拡張リストを配列としてキャプチャしてから、配列要素を引数として使用します。

file=(../Test_Data/usi*)
join -j 1 <(join -j 1 "${file[0]}" "${file[1]}") "${file[2]}"

答え2

POSIXシェルバリエーション従業員回答:

  1. printf '"%s" ' ../Test_Data/usi* | { read a b c ; join $a $b | join - $c ; }

  2. set -- ../Test_Data/usi* ; join "$1" "$2" | join - "$3"

関連情報