ファイルを配列にロードし、配列のデータを使用して2番目のファイルを処理します。

ファイルを配列にロードし、配列のデータを使用して2番目のファイルを処理します。

私はcygwin環境でWindows 7を使用しています。次のコマンドを使用して既存のawkscriptを実行しています。

awk -f awkscript datafile.txt

awkscript は datafile.txt のデータを読み込み処理します。 datafile.txtのフィールドの1つはコードです。

例: f1|f2|f3|f4

...ここでf2の値はコードです。

awkscriptのコードとその説明を関数の配列にハードコーディングし、処理中に説明を印刷することができますが、これは私にとって粗雑な方法のようです。

コードと説明を含むデータの例は次のとおりです。

111|Description of 111
222|Description of 222
333|Description of 333

...ここで111はコードで、「111の説明」を印刷したいと思います。このファイルを呼び出します。code-descr.txt

コードと説明を含む上記のファイルは決して変更されないので、awkscriptを実行してcode-descr.txtを配列に読み込みたいと思います。

これをコマンドラインにどのように追加しますかawk -f awkscript datafile.txt?コマンドラインに何も追加する必要がない場合は、実行時に常にcode-descr.txtを配列として読み取るにはどうすればよいですかawk -f awkscript datafile.txt

答え1

努力する

awk 'BEGIN { FS="|"} 
     FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }
      { for(i=1;i<=FS;i++) printf "%s|",descr[$i] ; printf "\n" ;} '  code-desc.txt datafile.txt

どこ

  • BEGIN { FS="|"} awkに区切り文字として使用するように指示|
  • FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }code-desc.txt を解析すると、配列が構成されます。
  • 他のすべての行については、フィールドの説明を印刷します。

注:

  • ファイルの順序を尊重します(datafile.txtより前のcode-desc.txt)。
  • 一重引用符の間のコードをawkスクリプトに入れることができます。
  • コードが間違っている場合は機能しません。

関連情報