線の下または上のデータのインポート

線の下または上のデータのインポート

これは私のファイルです:

print energy 1 end
  Local net energy (PE 0) = 1.635393034217E+05 kJ/mol
  Global net ELEC energy = 1.635393034217E+05 kJ/mol

print energy 2 end
  Local net energy (PE 0) = 1.682997967326E+05 kJ/mol
  Global net ELEC energy = 1.682997967326E+05 kJ/mol

数字が必要ですが、どちらが適しているかを知る唯一の方法はラインですprint。これまで、私はこのコマンドを使って問題を解決しました。

tail -16 file.txt | head -1 | awk '{print $6}'

しかし、この方法は良くないと思います。行番号に依存する必要があります。データが数千行の途中にある場合は失われます。これについてのより良いオプションを知っていますか?

ベストアンサー1

埋め込み(推測)各フィールドの後に2行目の6番目printのフィールドを印刷すると仮定すると、次のようになります。

awk '/print/{if (getline > 0 && getline > 0) print $6}'

または:

awk '!--n {print $6}; /print/ {n=2}'

最初の行の最後のフィールドにGlobal最初の項目の後に表示されるフィールドを含めるには、次の手順を実行しますprint energy 1 end

awk '/print energy 1 end/{found=1}; found && /Global/ {print $(NF-1); exit}'

ゲームの上の行のデータを印刷するには、まずデータを記録してからプレイしながら記録したデータを印刷する必要があります。たとえば、次を含む最初のフィールドの前の行にある6番目のフィールドを印刷しますprint

awk '/print/{print recorded;exit};{recorded=$6}'

おすすめ記事