0

多くの列を含むファイルがあります。1 つの列には番号のリストが含まれます。

   asd "/$ 0
   asd /"$ 1
   add %$" 4
   add "/% 18
   ads "/% 24
   add "/% 30

行に含まれる数値と前の行の前の行との差を測定できる awk を使用してスクリプトを作成したいと思います (例: 3 行目と 1 行目の差) 出力は次のようになります。

4
17
20
12

どうやってやるの ?(awkについての良いチュートリアルがあれば、私は感謝します)

4

3 に答える 3

3

のコード:

$ awk '{c=b;b=a;a=$3} c!="" {print $3-c}' ファイル
4
17
20
12

より一般的には、sudo_O の回答hereに基づいています。

$ awk -v distance=1 'NR>distance{print $3-a[(NR-distance)%(distance+1)]}{a[NR%(distance+1)]=$3}' ファイル
1
3
14
6
6

$ awk -v distance=2 'NR>distance{print $3-a[(NR-distance)%(distance+1)]}{a[NR%(distance+1)]=$3}' ファイル
4
17
20
12

$ awk -v distance=3 'NR>distance{print $3-a[(NR-distance)%(distance+1)]}{a[NR%(distance+1)]=$3}' ファイル
18
23
26
于 2013-07-09T18:22:58.463 に答える
2

次に、モジュラス演算子を使用して、計算に必要な最後の要素のみを格納する配列を作成する 1 つの方法を示します。

$ awk 'NR>2{print $3-a[(NR-2)%3]}{a[NR%3]=$3}' file
4
17
20
12

優れたチュートリアルについては、Effective AWK Programmingをご覧ください。

于 2013-07-09T18:12:13.277 に答える