複数のファイルがあります。
fname1
含まれています:
red=5
green=10
yellow=2
fname2
含まれています:
red=10
green=2
yellow=2
fname3
含まれています:
red=1
green=7
yellow=4
これらのファイルから読み取り、各色の数値を合計し、その合計を新しいファイルにリダイレクトするスクリプトを作成したいと思います。
新しいファイルには次のものが含まれます。
red=16
green=19
yellow=8
[awk]はあなたの友達です:
awk 'BEGIN{FS="=";}
{color[$1]+=$2}
END{
for(var in color)
printf "%s=%s\n",var,color[var]
}' fname1 fname2 fname3 >result
それをする必要があります。
上記のものの謎を解く
''
いるものはすべてawkプログラムです。BEGIN
は一度だけ、つまり最初に実行されます=
と、awkは=
フィールド/列を区切るために使用します。awk
は、各行はレコードと見なされます。=
、区切り文字として各レコードに$ 1と$ 2で示される2つのフィールドがあります。{color[$1]+=$2}
(まだ存在していない場合)のような色の名前を連想配列を作成key
し、+=
追加しvalue
、この配列要素にFIELD2のを。作成時の連想配列はゼロに初期化されることを忘れないでください。END{}
すべては、最後に、つまり終了直前にのみ実行されます。for(var in color)
は、連想配列の解析に使用されるforloopのスタイルです。var
になりますkey
し、color[key]
値を指します。printf "%s=%s\n",var,color[var]
自明です。注意
fname
置くこともできますfname*
fname1 fname2 fname3
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加