给定一个包含数值数据的文件,语法如下:
D1 D2 -- D3 D4 -- ... -- Dn-1 Dn
哪里是任何正数。 我想输出一个新的文件包含
D2-D1 D4-D3 ... Dn-Dn-1
使用bash实现这个的基本方法是什么?
有这个源文件:
$ cat source 3 7 -- 9 14 -- 9 3
使用awk
(更好的工具来完成这个任务):
awk '{print $2+0-$1+0}' RS='--' source > target
结果:
$ cat target 4 5 -6
如果你想坚持bash
:
flag=0 while IFS='' read -r num; do if [ $flag -eq 0 ]; then d1=$num flag=1 continue fi if [ $num = "--" ];then flag=0 continue fi (( num -= d1)) echo $num done < source > target
GNU awk解决方案:
示例测试文件(假设D
前缀是必需的):
D2 D3 -- D3 D5 -- D3 D10 --
工作:
awk -v RS='--' -v FPAT='[0-9]+' 'NF{print $2-$1}' file
输出:
1 2 7