カスタムgrep出力

カスタムgrep出力

次のサンプル行を含む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最後にソートされます。

関連情報