質問: サイトを見ていた時に理解できない処理がございました。 コードの意味を教えて頂ければと思います。 <<コード>> $ 〜〜〜〜〜〜〜〜 | awk -F'[<> "]' '/t="s"/{print $4,"s",$(NF-4)}!/t="s"/{print $4,"n",$(NF-4)}' | awk 'FILENAME=="strings"{s[$1]=$2}FILENAME=="-"&& $2=="s"{print $1,s[$3]}$2=="n"{print $1,$3}' strings - 上記の下2行の処理内容の意味が理解出来ません。 どうぞ、宜しくお願い致します。
回答: スクリプト部分を抜き出して改行を入れてみました。 ``` FILENAME=="strings"{s[$1]=$2} #1 FILENAME=="-"&& $2=="s"{print $1,s[$3]} #2 $2=="n"{print $1,$3} #3 ``` おそらくstringsなるファイルの中では ``` x 10 y 20 ``` のように「項目名 値」が記入されているものと思います。 1行目は、連想配列sにデータを格納していく処理です。ここで取り込まれた情報は後でs["x"]のようにして利用できます。 2行目は、入力元が標準入力である場合に、各行の第1コラムとs[第3コラム]の値を並べて出力しています。ここではパイプでつながっている前段のawkの出力が「ほにゃらら s ほにゃほにゃ」の場合と「ほにゃらら n ほにゃほにゃ」の場合があり、前者の場合のみ出力を行うということになります。 3行目は、入力元としてstringなるファイルと標準入力を並べて指定しているだけです。 以上ですが、全体的に不思議なスタイルのスクリプトだなとは思います。無駄に場合分けして、無駄に条件判定してフィルタリングしてますね。一つのスクリプトで半分のコード量で同じことができるはずですが、なぜこんな謎な書き方をしているのか...。