使用AWK在同一列中的数字之间的差异

我有一个包含一列数字的文件:

1 2 4 4 10 

我想用awk来计算每个数字之间的差别。 输出应该是这样的:

 1 2 0 6 

我该怎么做 ?

Solutions Collecting From Web of "使用AWK在同一列中的数字之间的差异"

试试下面的代码:

 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操作中被调用,则行为是不确定的。

只是为了缩短…

 % awk 'NR>1{print $1-p} {p=$1}' file 1 2 0 6 

如果awk不是一个严格的要求,一个shell解决方案:

 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 

代码为GNU awk

 $ awk'{p = f; f = $ 1} NR> 1 {print fp}'文件
 1
 2
 0
 6