一直关注双色球彩票,也一直想对往期的数据作一个统计和排序之类的,看能不能利用概率的知识来对以后的开奖作出预测(当然从概率的发生事件来说,开出任何一场数字的概率的是平等的),预测也只能预测可能性大小;
于是做了以下工作:
首先把网上下载下来的数据作规则化处理(sed 去行),即让其排列规则,方便进行文本处理;
删除不要的数据,如期数;只留开奖数字,开奖时间(awk去列)
文本较大,先截取部分做试验(split,tail,head)
得到文本大致如下:
01,03,15,20,22,31|03 2012-11-04
01,07,09,17,21,29|01 2012-11-01
05,09,12,29,30,31|05 2012-10-30
01,09,11,21,26,32|08 2012-10-28
03,05,12,15,23,24|07 2012-10-25
08,12,13,26,29,33|01 2012-10-23
06,07,21,25,27,33|11 2012-10-21
08,10,16,25,28,33|09 2012-10-18
12,13,19,22,28,29|11 2012-10-16
01,07,08,20,23,24|11 2012-10-14
排序?如何排呢?逐行两两比较?像C语言中一样去进行,现在的数据可是以行为单位的,还要进行行的读取,这样下来好像比较复杂吧!如何截取数据也是一个难点。看来此法不通,既然是shell,一般脚本都不长,应该有其它方法,于是搜到了sort。之前python是以函数的形式存在的。
1、排序文本sort 命令
ORT(1) User Commands SORT(1)
NAME
sort - sort lines of text files
SYNOPSIS
sort [OPTION]... [FILE]...
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。
如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。
-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出文件。
如果不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文件的所有行排序。
参数描述:
例子:以默认方式排序:sort 命令基于当前语言环境的整理顺序对输入文件的所有行排序
yee@Loong:~/lottery$ cat b.txt
01,03,15,20,22,31|03 2012-11-04
01,07,09,17,21,29|01 2012-11-01
05,09,12,29,30,31|05 2012-10-30
01,09,11,21,26,32|08 2012-10-28
03,05,12,15,23,24|07 2012-10-25
08,12,13,26,29,33|01 2012-10-23
06,07,21,25,27,33|11 2012-10-21
08,10,16,25,28,33|09 2012-10-18
12,13,19,22,28,29|11 2012-10-16
01,07,08,20,23,24|11 2012-10-14
yee@Loong:~/lottery$ sort b.txt
01,03,15,20,22,31|03 2012-11-04
01,07,08,20,23,24|11 2012-10-14
01,07,09,17,21,29|01 2012-11-01
01,09,11,21,26,32|08 2012-10-28
03,05,12,15,23,24|07 2012-10-25
05,09,12,29,30,31|05 2012-10-30
06,07,21,25,27,33|11 2012-10-21
08,10,16,25,28,33|09 2012-10-18
08,12,13,26,29,33|01 2012-10-23
12,13,19,22,28,29|11 2012-10-16
yee@Loong:~/lottery$
2、uniq 文本去重
UNIQ(1) User Commands UNIQ(1)
NAME
uniq - report or omit repeated lines
SYNOPSIS
uniq [OPTION]... [INPUT [OUTPUT]]
DESCRIPTION
Discard all but one of successive identical lines from INPUT (or standard input), writing to
OUTPUT (or standard output).
文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的唯一样本。
语法:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
-d或--repeat ed 仅显示重复出现的行列。
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位。
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符。
-u或--unique 仅显示出一次的行列。
-w<字符位置>或--check-chars=<字符位置> 指定要比较的字符。
--help 显示帮助。
--version 显示版本信息。
实练:
Loong:/home/yee/lottery# cat b.txt
08,12,13,26,29,33|01 2012-10-23
06,07,21,25,27,33|11 2012-10-21
08,10,16,25,28,33|09 2012-10-18
12,13,19,22,28,29|11 2012-10-16
01,07,08,20,23,24|11 2012-10-14
06,07,21,25,27,33|11 2012-10-21
06,07,21,25,27,33|11 2012-10-21
08,10,16,25,28,33|09 2012-10-18
06,07,21,25,27,33|11 2012-10-21
Loong:/home/yee/lottery# uniq -d b.txt 只比较相邻的行
06,07,21,25,27,33|11 2012-10-21
Loong:/home/yee/lottery# uniq -cd b.txt
2 06,07,21,25,27,33|11 2012-10-21 比较相邻的行,并输出重复次数
Loong:/home/yee/lottery# uniq -c b.txt
1 08,12,13,26,29,33|01 2012-10-23
1 06,07,21,25,27,33|11 2012-10-21
1 08,10,16,25,28,33|09 2012-10-18
1 12,13,19,22,28,29|11 2012-10-16
1 01,07,08,20,23,24|11 2012-10-14
2 06,07,21,25,27,33|11 2012-10-21
1 08,10,16,25,28,33|09 2012-10-18
1 06,07,21,25,27,33|11 2012-10-21
Loong:/home/yee/lottery# sort b.txt|uniq -c 检查全文重复次数
1 01,07,08,20,23,24|11 2012-10-14
4 06,07,21,25,27,33|11 2012-10-21
2 08,10,16,25,28,33|09 2012-10-18
1 08,12,13,26,29,33|01 2012-10-23
1 12,13,19,22,28,29|11 2012-10-16
Loong:/home/yee/lottery#
3、文本的提取
cut命令
cut命令可以从一个文本文件或者文本流中提取文本列。
cut [选项]… [文件]…
选项说明:
-b, –bytes=LIST 以字节为单位取出固定字节区间
-c, –characters=LIST 以字符为单位取出固定字符区间
-d, –delimiter=DELIM 指定分隔符来代替默认的TAB分隔符 wc -l $file|cut -d " " -f1 以空格为分割截取;wc统计行数
-f, –fields=LIST 依据 -d 指定的分隔符将一段内容分割成为数段,用 -f 取出第几段的意思 echo $line|cut -d: -f3 以冒号为分隔进行截取
-n with -b: 不分隔多字节字符
–complement 补充选定的字节,字符集或字段
-s, –only-delimited 不打印不包含分隔符的行
–output-delimiter=STRING 使用String 作为输出分隔符,默认的是使用输入分隔符
- 仅使用f -b, -c 或-f 中的一个。每一个列表都是专门为一个类别作出的,或者您可以用逗号隔
- 开要同时显示的不同类别。您的输入顺序将作为读取顺序,每个仅能输入一次。
- 每种参数格式表示范围如下: -c, –characters=LIST 以字符为单位取出固定字符区间 即与 -c 搭配使用
- N 从第1 个开始数的第N 个字节、字符或域
- N- 从第N 个开始到所在行结束的所有字符、字节或域
- N-M 从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域
- -M 从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域
Loong:/home/yee/lottery# cut -c 12- b.txt
,29,33|01 2012-10-23
,27,33|11 2012-10-21
,28,33|09 2012-10-18
,28,29|11 2012-10-16
,23,24|11 2012-10-14
,27,33|11 2012-10-21
,27,33|11 2012-10-21
,28,33|09 2012-10-18
,27,33|11 2012-10-21
Loong:/home/yee/lottery# cut -c 12-17 b.txt
,29,33
,27,33
,28,33
,28,29
,23,24
,27,33
,27,33
,28,33
,27,33
Loong:/home/yee/lottery#
4、read
语法
read [options]
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志,会举例说 明。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以时候命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。本文来自博客园,作者:{Julius},转载请注明原文链接:https://www.cnblogs.com/bestechshare/p/16447852.html
可微信加我,了解更多,WeChat:{KingisOK}