我有以下问题:
我有大量具有以下名称的文件: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
.
.
.
答案1
原始输入文件不存在于您的问题中,而是来自您提供的 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