您好我的输入文件包含一个字段:
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
有什么帮助吗?
答案 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 } }