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

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

我有以下问题:

我有大量具有以下名称的文件:mfifm-slab-l1=XX-l2=YY-scf.out.XXYY从 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

相关内容