次のサンプル行を含むDeployList.txtというファイルがあります。
Database/test.sql
Tivoli/jobstr01.js
Tivoli/res01.res
Tivoli/job01.job
Datastage/test.dsx
「Tivoli /」で始まる行を見つける必要があります。最初に.res行が必要で、次に.job、最後に.js行が必要です。他のパターンにも従います。だから出力は次のようになります...
Tivoli/res01.res
Tivoli/job01.job
Tivoli/jobstr01.js
だから私はそれまで閉じ込められています...
grep -e ^Tivoli/ DeployList.txt
この目的で、もはや一時ファイルを作成したくありません。
答え1
GNU Awk> 4.0では、このようなことができます。
gawk -F'[.]' '
BEGIN{
i["res"]=3; i["job"]=2; i["js"]=1;
PROCINFO["sorted_in"]="@val_num_desc"
}
/^Tivoli/ {
a[$0]=i[$2]
}
END{
for (x in a) print x
}' DeployList.txt
Tivoli/res01.res
Tivoli/job01.job
Tivoli/jobstr01.js
連想配列は、i["res"]=3; i["job"]=2; i["js"]=1
拡張のソート順序を定義します。他の拡張は返されるので、0
最後にソートされます。