例は次のとおりです。
$ cat file1
hello
there
$ cat file2
some,very,long,line,hello,csv
some,very,long,line,nope,csv
$ join -t, -1 1 -2 5 file1 file2
hello,some,very,long,line,csv
これは文書化された方法で機能します。リンクされたフィールドが左に引かれ、残りのフィールドが印刷されます。
しかし、私が望む出力はCSV(file2)列の順序を維持することです。 CSVフィールド番号を明示的に一覧表示する次のコマンドを使用して、CSV全体を印刷できます。
join -t, -1 1 -2 5 -o $(head -n1 file2 | awk -F, '{print NF}' | xargs seq | sed 's/^/2./' | paste -d, -s) file1 file2
次のように印刷されます。
some,very,long,line,hello,csv
私アイデアjoin
これには形式がありますauto
。マンページjoin
の貴重な内容は次のとおりです-o FORMAT
。
FORMATが "auto"キーワードの場合、各ファイルの最初の行は行ごとに出力されるフィールドの数を決定します。
しかし、これが何を意味するのか、フォーマットをどのように使用するのかわかりませんauto
。
私はこれを試しましたが、以前とは異なる結果は得られませんでした。
$ join -t, -1 1 -2 5 -o auto file1 file2
hello,some,very,long,line,csv
素朴な説明は、必要なフィールドを各ファイルの最初の行にリストする必要があるということですが、それも間違っています。
だから私の質問はこれが何であり、どのauto
ように使用するべきですか?入力CSVの列順序を維持するためにそれを使用できますか?