需要帮助以获得shell中两个数字之间的差距

时间:2017-05-30 05:34:49

标签: linux bash shell unix awk

我的i / p文件如下:

name 1
info 21
city 28
pin  31
state 34
   -   39 

并且看o / P将是:(“,l-”对于所有行是恒定的)

    20,l-name
    7,l-info
    3,l-city
    3,l-pin
    5,l-state

以下shell代码:

awk 'NR>1{ printf "%d,l-%s\n", $2 - val, label } {label=$1; val=$2}' input

我正在等待

1,
21,l-name 
24,l-info
28,l-city

但我需要两个值之间的区别如:

20,l-name
3,l-info
4,l-city 

这里我想从第二个数字中减去第一个数字作为它之间的差距。请帮帮我......

2 个答案:

答案 0 :(得分:1)

您可以使用此awk

awk -v OFS=, 'NR>1{print ($2 - n), "l-" v} {v = $1; n = $2}' file

20,l-name
7,l-info
3,l-city
3,l-pin
5,l-state
  • 此awk command stores every row's 2 columns in 2 variables v and n`
  • 当行数大于1时,我们计算差异并打印出来。

答案 1 :(得分:0)

很奇怪 - 在我的Mac上运行得到正确的结果: -

$ cat inp
name 1
info 21
city 28
pin  31
state 34
-   39 
$ awk 'NR>1{ printf "%d,l-%s\n", $2 - val, label } {label=$1; val=$2}' inp
20,l-name
7,l-info
3,l-city
3,l-pin
5,l-state

猜测一下,您需要检查awk的版本,因为它似乎没有遵守NR>1模式并且没有执行{{1}减法。 可以通过创建另一个变量,执行减法,然后执行$2 - value

来解决这个问题
printf