awkを使用して列の識別子に基づいて連続行から2つの数字を減算する

awkを使用して列の識別子に基づいて連続行から2つの数字を減算する

Bashを学んでいますが、テキストファイルからデータを抽出するのに問題があります。 「awk」が使えることはわかりますが、どのように使うのかわかりません。

次のデータを2つの列にまとめました。

8.044   FIX
9.326   3 the
18.726  blank
20.742  FIX
63.624  FIX
64.89   3 house
73.656  TEST

2番目の列の識別子に基づいて、最初の列に示されている数字を減算したいと思います。 2番目の列の「3」は私の識別子で、次の行は私が減算したい番号です。したがって、次のようにする必要があります。

18.726 - 9.326
73.656 - 64.89

出力は、次の3つの列を持つテキストファイルになければなりません。

9.326 9.4 1
64.89 8.766 1

どんな助けでも大変感謝します!よろしくお願いします!

答え1

努力する:

awk '$2=="3"{out=1;last=$1;next}out{print last,$1-last,1;out=0}' infile

答え2

ファイルの行を置き換えると、awkコードが簡単になります。

tac file | awk '$2 == "3" {print $1, prev - $1, 1} {prev = $1}' | tac
9.326 9.4 1
64.89 8.766 1

「3」が行の最後に表示されると、2番目の値は最初の値の否定値になります。 "prev"変数は空であり、awkは減算で値0を使用します。

関連情報