私は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スクリプトに入れることができます。
- コードが間違っている場合は機能しません。