コマンドの出力をawkスクリプト本体の変数にパイプします。

コマンドの出力をawkスクリプト本体の変数にパイプします。

与えられたinputfile

Cherries:20:100:300
Beans:12:400:500
Tomatoes:32:445:234
Potatoes:24:400:200
Kiwis:23:230:435

次のawkスクリプトがありますtestscript.script

BEGIN{ FS = ":" 
print "------------------------"
}

if($3 + $4 > 500) {print $1, $2}
END{
print "------------------------" 
}

このスクリプトを呼び出すときの出力awk -f testscript.script inputfileは次のとおりです。

------------------------
Beans 12
Tomatoes 32
Potatoes 24
Kiwis 23
------------------------

このリストをアルファベット順(名前ベース)で並べ替え、変数に保存したいと思います。エンドブロックアークスクリプト。

つまり、コードは次のようになります。

BEGIN{ FS = ":" 
print "------------------------"
}

*if($3 + $4 > 500) {print $1, $2 | "sort" = variable}
END{
print "------------------------" 
print variable
}

このprint variableコマンドは生成されます

------------
------------
Beans 12
Kiwis 23
Potatoes 24
Tomatoes 32

ソートされた項目のリストを変数にし、破線の後のENDブロックに印刷します。

これを行う最良の方法は何ですか?

ベストアンサー1

echo "---------------";awk -F: '$3+$4>500{print $1,$2}' inputfile |sort && echo "---------------"

awkを使う

awk -F: '$3+$4>500{Arr[$1]=$2}END{n=asorti(Arr,SArr);for(i=1;i<=n;i++){print SArr[i],Arr[SArr[i]]}}' inputfile

おすすめ記事