ファイルからパターンとファイル名を抽出する

ファイルからパターンとファイル名を抽出する

次の質問があります。

次のような名前のファイルがたくさんありますmfifm-slab-l1=XX-l2=YY-scf.out。は1から27までの数字XXです。YYファイルから必要な情報を抽出し、次のようにファイル名で印刷できます(このようなさまざまな行を想像してください)。

.
.
.
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

以下は、より明確でわかりやすく書かれた2番目のスクリプトです。

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

関連情報