BASH脚本从前一行中减去下一行

时间:2015-12-08 18:11:48

标签: bash

我正在尝试编写一个用于解析时间戳文件的脚本,我需要在每一行上追加经过的时间。例如,如果我的文件是这样的,则每个数字都是事件发生的时间:

1
12
50

我想将其追加为

1 11
12 38
50

因为第一次事件发生了11分钟,直到2分钟才开始,等等。

我在访问下一行时遇到问题,并且通常也会循环访问该文件。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

awk救援!

$ awk 'NR==1{p=$1;next} 
            {print p, $1-p; p=$1} 
         END{print p}' times

1 11
12 38
50

答案 1 :(得分:0)

给@karakfa

提示

perl -lne 'if ($.==1){$p=$_} else{print "$p ".($_-$p); $p=$_} END{print $p}' times

$.是行号(类似于awk的NR
$_是当前行的内容(类似于awk的$1

输出:

1 11
12 38
50

答案 2 :(得分:0)

仅限BASH - 这是关闭的,不会自己打印最后一个并且您需要初始化行变量,该行变量在开始时导致零。一个更复杂的脚本可以提前读取,或者有人可能会告诉我们如何抵消行索引。

$ cat nums.txt
1  
12  
50  

$ line=0

$ for next in $(cat nums.txt); do echo $line $(expr $next - $line) ;\  
> line=$(echo $next) ; done  
0 1  
1 11  
12 38