13

1列の数字を含むファイルがあります:

1
2
4
4
10

awkを使用して各数値の差を計算したいと思います。出力は次のようになります。

1
2
0
6

どうすればできますか?

4

4 に答える 4

23

次のコードを試してください:

awk '
    NR == 1{old = $1; next}     # if 1st line 
    {print $1 - old; old = $1}  # else...
' file.txt
1
2
0
6

説明

  • NRは、入力の開始からの現在のレコードの序数です。BEGIN アクション内では、値はゼロでなければなりません。END アクション内では、値は最後に処理されたレコードの番号になります。
  • 次のステートメントは、現在の入力レコードの以降のすべての処理を破棄します。BEGIN アクションまたは END アクションで次のステートメントが表示されるか呼び出される場合、動作は未定義です。
于 2013-07-04T19:20:30.087 に答える
19

短くするだけで...

% awk 'NR>1{print $1-p} {p=$1}' file
1
2
0
6
于 2013-07-04T19:33:21.040 に答える
4

awk が厳密な要件ではない場合、シェル ソリューション:

set -- $(< file)
p=$1; shift; while (($# > 0)); do echo $(($1 - p)); p=$1; shift; done

ドライヤー

set -- $(< file)
while (($#>0)); do [[ -n $p ]] && echo $(($1-p)); p=$1; shift; done
于 2013-07-04T20:15:42.263 に答える