Awk
從文件中提取模式和文件名
我有以下問題:
我有大量具有以下名稱的文件:
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