awkなしである列から別の列に結合されたパスを印刷する方法は?

awkなしである列から別の列に結合されたパスを印刷する方法は?

awk次のコマンドと同じ機能を達成したいと思います。

awk  -F ";" '{print $3 >  "/" $1 "/" $2}' file

たとえば、

入力として2行のファイルがあります。

path1;filename_1;f3_1
path2;filename_2;f3_2   

私が望む出力は次のとおりです。

  • ファイルの/path1/filename_1内容は次のとおりです。f3_1
  • ファイルの/path2/filename_2内容は次のとおりです。f3_2

awkを使用してこれを実行すると、141終了コードSIGPIPEが表示されます。このエラーをバイパスしたいです。

ベストアンサー1

awkファイルハンドルが不足しているようです。最新バージョンにアップグレードできない場合、awk最も明確な回避策はそのファイルを使用してからそのファイルを閉じることです。

path;filename複数回発生する可能性のある組み合わせはありますか?

そうでない場合は、以下を試してください。

awk  -F ";" '{f="/"$1"/"$2; print $3 > f ; close(f)}' file

そうでなく>> f既存のファイルに追加できる場合は、次を使用します。

awk  -F ";" '{f="/"$1"/"$2; print $3 >> f ; close(f)}' file

ファイルを最初に作成するときにカットする必要がありますが、それ以降に追加する必要がある場合、状況は少し複雑です。

awk  -F ";" '{ f="/"$1"/"$2;
               if ( !fnames[f]++ ) { print > f };
               print $3 >> f;
               close(f)
             }' file

連想fnames配列は、スクリプトがファイル名を解決したかどうかを判断するために使用されます。そうでない場合は、ファイルを切り捨てます。

おすすめ記事