結論
grep -Po 'キーワード\K[^ ]+' <<< 入力データ >> 出力先
例)gnuplotで表示するためのテキストファイル準備[VASP計算用 in Linux]
\#!/bin/bash
\#各フォルダのOSZICARkからエネルギーの値を抽出したい
WORKDIR=`pwd`
echo "" > energy
for Q in 0.97 0.98 0.99 1.0 1.01 ;
do
cd \$WORKDIR/\$Q
echo "$Q" |tr '\n' '\t' >> ../energy
tail -n 1 OSZICAR >> ../energy
done
で
0.97 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259105E-04
0.98 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259105E-04
0.99 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259106E-04
1.0 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259107E-04
1.01 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259106E-04
を得たけど、本当は[d E =]以降を集めて
0.97 -.259105E-04
0.98 -.259105E-04
0.99 -.259106E-04
1.0 -.259107E-04
1.01 -.259106E-04
が欲しい。
tail -n 1 OSZICAR >> ../energy
を
grep -Po 'd E =\K[^ ]+' <<<`tail -n 1 OSZICAR` >> ../energy
に置き換えて解決!
\K[^ ]+とか正確に覚える自信がないので備忘録として保存
参考リンク
https://askubuntu.com/questions/697120/extract-word-from-string-using-grep-sed-awk