ファイルには、数字を含まない行が 2 回表示される行パターンがあります。
Energy initial, next-to-last, final =
-87057.8200168321 -87208.7223900015 -87208.7197287879
Energy initial, next-to-last, final =
-87208.7197287879 -87208.7223900015 -87310.7197287879
-87310.7197287879
数字を含まない行が2番目に表示された後、行の末尾にある値を抽出したいと思います。
awkまたはSedを使用してこれをどのように実行できますか?
答え1
awk '/^Energy initial, next-to-last, final =/
{ if (secondline==0) { secondline=1; next; } else { getline; print $3; } }' inputfile
-87310.7197287879
答え2
ファイルにこのパターンが1つ以上ある場合、他のアプローチは次のとおりです。
$ awk '/^Energy initial, next-to-last, final =/ {a[NR]=1}
{if(NR >= 3 && a[NR-2] == a[NR] && a[NR] == 1) {toprint=1; next}}
{if (toprint) {print $3; toprint=0}}' infile
それにもかかわらず、Haukeのソリューションははるかに醜いです。
答え3
ちょっと待ってください:
> awk '{print $3}' /tmp/test.txt | grep -m1 -vE '[a-z]'
-87208.7197287879
このawk
コマンドは3番目の項目($3
)を印刷し、/tmp/test.txt
次grep
の操作を行います。いいえ[a-z]
テキストのある行を削除し()、選択した行の1つ-m1
の後に停止するすべての文字と一致します()