다음 샘플 줄이 포함된 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
마지막으로 정렬됩니다.