自定义 grep 输出

自定义 grep 输出

我有一个名为 DeployList.txt 的文件,它包含如下示例行。

Database/test.sql
Tivoli/jobstr01.js
Tivoli/res01.res
Tivoli/job01.job
Datastage/test.dsx

我需要 grep 以“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因此将排在最后。

相关内容