次の質問があります。
次のような名前のファイルがたくさんあります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