Awk

從文件中提取模式和文件名

  • September 8, 2022

我有以下問題:

我有大量具有以下名稱的文件:mfifm-slab-l1=XX-l2=YY-scf.out. XX並且YY是從 1 到 27 的數字。我能夠從文件中提取我想要的資訊並將其與文件名一起列印,如下所示(想像許多不同的行,像這樣):

.
.
.
mfifm-slab-l1=3-l2=17-scf.out     !    total energy              =   -7460.95083408 Ry
.
.
.

我的問題是:是否可以僅從文件名中提取 XX 和 YY 部分並使其如下所示:

.
.
.
3    17     !    total energy              =   -7460.95083408 Ry
.
.
.

原始輸入文件不存在於您的問題中,而是來自您在評論中提供的 awk 腳本:

awk '/!/{print FILENAME,"   ",$0}' *.out

您說的是在您的問題中產生輸入,我認為這將直接從原始輸入文件中產生您問題中的最終預期輸出:

awk 'FNR==1{split(FILENAME,f,/[-=]/)} /!/{print f[4], f[6],"   ",$0}' *.out

這是第二個腳本,寫得更清晰,更容易理解:

awk '
   FNR==1 {
       split(FILENAME,f,/[-=]/)
   }
   /!/ {
       print f[4], f[6], "   ", $0
   }
' *.out

引用自:https://unix.stackexchange.com/questions/716495