用于从上述字段中减去的awk脚本

时间:2010-12-09 14:03:17

标签: unix awk

您好我的输入文件包含一个字段:

30
58
266
274
296
322
331

我需要输出为第2行和第1行(58-30 = 28)和第3行和第2行(266-58 = 208)的差异,依此类推。 我的输出应如下所示:

30 30
58 28
266 208
274 8

有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

data=`cat file | xargs`
echo $data | awk '{a=0; for(i=1; i<=NF;i++) { print $i, $i-a; a=$i}}'

30 30
58 28
266 208
274 8
296 22
322 26
331 9

评论时更新没有cat/xargs

awk '{printf "%d %d\n", $1, $1-a; a=$1;}' file

答案 1 :(得分:1)

你实际上并不需要来自Khachick答案的for循环,因为Awk无论如何都会遍历所有行。更简单的是:

cat file | awk '{ BEGIN { a=0 }; { print $1, $1-a; a=$1 }'

但是,如果在更改其值之前初始化变量,则可以通过初始化BEGIN块中的变量而不执行打印来跳过您不想要的第一行。有点像:

BEGIN { started=0 }; { if(0 == started) { started = 1 } else { print $1, $1-a } }