- ベストアンサー
awkとsedですが、これが何をしているか解説お願いできますでしょうか?
丸投げで大変申し訳ございません。 これが何をしているかどなたか解説お願いできませんでしょうか? HOGE1=`awk 'NR=='$_HOGE2'' hogehoge |sed 'y/:/\n/'|awk 'NR=='1''` よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
awk 'NR=='$_HOGE2'' hogehoge hogehogeを読んで、読んだ行が$_HOGE2行目だったなら、その行のみをsedに渡す sed 'y/:/\n/' 「:」を「改行」に置換する。つまり「:」ごとに区切られた項目を、1行づつに分解してswkに渡す 「あああ:aaa:111:ddd」と言う行なら あああ aaa 111 ddd の4行になる。 awk 'NR=='1'' 1行目を出力する。 最終的な出力結果は、変数「HOGE1」に代入される。 で、結局は「hogehogeファイルの$_HOGE2行目を:で区切って、1項目をHOGE1に代入する」ってこと。 そして、この処理は「awk1つで書ける」ので「awk呼んでsed呼んでawkをまた呼んで」と言う「遅くて無駄ありすぎでプロセス食い過ぎな馬鹿な処理」は改良の余地がある。 ヒント ・awkには「項目の区切り文字を何にするか」を指定する変数FSがある ・awkには「1番目の項目」だけを出力する機能がある