如果这是一个简单的问题(或者比我想的更复杂),我不会这样做是为了生活,请原谅我.我一直在挖掘档案,发现很多技巧很接近,但是作为一个新手,我不知道如何调整我的需求,或者他们超出了我的理解.
我有一些大数据文件,我可以解析出来生成一个主要是顺序的坐标列表
5
6
7
8
15
16
17
25
26
27
Run Code Online (Sandbox Code Playgroud)
我想要的是一份差距清单
1-4
9-14
18-24
Run Code Online (Sandbox Code Playgroud)
我不知道perl,SQL或任何花哨的东西,但我想我可以做一些能从下一个中减去一个数字的东西.然后,我至少可以grep
得到差异不是1或-1的输出,并与之合作以获得差距.
Gil*_*not 66
用awk:
awk '$1!=p+1{print p+1"-"$1-1}{p=$1}' file.txt
Run Code Online (Sandbox Code Playgroud)
$1
是当前输入行的第一列p
是最后一行的先前值($1!=p+1)
条件$1
也是如此:如果与前一个值+1不同,那么:{print p+1 "-" $1-1}
打印前一个值+1,-
字符和第一列+ 1{p=$1}
对每一行执行:p
分配给当前第1列只需记住前一个数字并验证当前数字是否是前一个数字加一即可:
#! /bin/bash
previous=0
while read n ; do
if (( n != previous + 1 )) ; then
echo $(( previous + 1 ))-$(( n - 1 ))
fi
previous=$n
done
Run Code Online (Sandbox Code Playgroud)
您可能需要添加一些检查以防止出现诸如28-28
单个数字间隙之类的行。