我有一个名为 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
因此将排在最后。