Joinコマンドの自動フォーマットはどのように機能しますか?

Joinコマンドの自動フォーマットはどのように機能しますか?

例は次のとおりです。

$ 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の列順序を維持するためにそれを使用できますか?

ベストアンサー1

おすすめ記事