一意の値がソートされていて(ファイルに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シェルバリエーション従業員回答:
printf '"%s" ' ../Test_Data/usi* | { read a b c ; join $a $b | join - $c ; }
set -- ../Test_Data/usi* ; join "$1" "$2" | join - "$3"