|
发表于 2007-7-4 21:17:31
|
显示全部楼层
因为这个文件中包含\r\n,所以
sort -n -u 数字.txt | sed s@^M@@ | (a=1;while read b ;do for((;a<b;a++));do echo $a;done;((a++));done) 2>/dev/null > 新数字.txt
解释:
sort -n -u 表示按照数字方式排序,如果有重复的则去除重复的部分
sed s@^M@@表示将\r这个字符删除,^M是通过按ctrl+VM获取的,也可以用\\r来代替
a=1;while read b ;do for((;a<b;a++));do echo $a;done;((a++));done
先设置初始值a=1,然后从标准输入中读一个字符串(数值型的)b
从a到b进行循环,并打印a的值,如果a和b之间有差值,那么就会打印出那些缺少的数字
循环结束后,a与b的值相同,因此需要把a的值增加1 ((a++))
>/dev/null 是把错误不输出,因为有这两个数08 09 在bash中,把有前导0的值作为8进制来处理,因此,08 09就不是合理的数值了,因此,会有错误输出,不过不影响结果(如果只出现09,而没有08的情况下,会出现缺省结果中少一个8,对这个错误,不知道该如何用简单的方式来处理 )
> 新数字.txt 表示将结果输出到新的文件中
[color="Red"]注:脚本运行环境:debian testing [GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)] |
|