.txt
私のディレクトリには、双極子モーメントに関する情報を含む多くのファイルがあります。次のように進みます。
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
lorem ipsum
text
that is
not
relevant
Dipole Moment: [D]
X: 1.2808 Y: 0.2908 Z: 1.0187 Total: 1.6622
more text
このファイルから総双極子モーメントを抽出したいと思います。次のスクリプトを実行しています。
awk '/Dipole Moment: \[D\]/{found=1;next} found{print $NF;found=""}' *.txt > dipole_bma.txt
スクリプトは1.6622を2回印刷します。すべての双極子モーメントは各ファイルに2回ずつ含まれていますTotal
。正規表現がファイルに2回表示されるため、2回印刷されたようです。
私の質問は、各ファイルの合計双極子モーメントを一度だけ印刷するにはどうすればよいですか?
答え1
使用nextfile
氏名:
awk '/Dipole Moment: \[D\]/{found=1;next} found{print $NF;nextfile;}' *.txt
答え2
Gnu sedは次のことができます:
sed -ns '
/^Dipole Moment: \[D]/!d
$!N;/\n/s/.* //p;:n;n;bn
' ./*.txt
-s
オプション(nonPosix)はファイルを別々のストリームとして扱います。-n
次のレコードを取得するまでパターン空間のデフォルト印刷を抑制します。- 双極子モーメント線の後に、次の行をパターンスペースに貼り付けます。
- 最後のスペースまで削除すると(末尾のスペースがないと仮定)、双極子モーメント値である最後のフィールドが印刷されます。
- 次に、現在のファイルの終わりに移動します。次のファイルに対してプロセス全体を繰り返します。