文件的排序合并和分割.docx
《文件的排序合并和分割.docx》由会员分享,可在线阅读,更多相关《文件的排序合并和分割.docx(11页珍藏版)》请在冰豆网上搜索。
文件的排序合并和分割
1)Sort命令
Sort命令将输入文件看作油多条记录组成的数据流,而记录是由可变宽度的字段组成,以换行符作为定界符。
Sort和awk一样,可将记录分成多个域进行处理,默认的域分隔符是空格。
Sort命令选项极其含义
选项
意义
-c
测是文件是否已经被排序
-k
制定排序的域
-m
合并两个以排序的文件
-n
根据数字大小进行排序
-o[输出文件]
将输出写到指定文件,相当于重定向
-r
将排序结果逆向显示
-t
改变域分隔符
-u
去除结果中的重复行
#Sort-t:
-k3nrcargo.db
输出结果:
Thinkpad:
USA:
14000:
2009:
X31
HP:
China:
12000:
2010:
ne808
Thinkpad:
HongKong:
10000:
2008:
T40
Acer:
Taiwan:
8000:
2010:
Pt210
Ideapad:
China:
8000:
2007:
x60
HP:
China:
5600:
2010:
x60
-t:
表示输入文件(cargo.db)的域分隔符为“:
”
-k3表示按照第三个域进行排序,由于系统默认是将所有的数据看作是字符串的形式进行处理的,故如果不加-n参数的话,系统将按照域3将数字按照字符进行处理,即按第一个元素的升序进行排序,如果第一个元素相同则对第二个元素进行判断。
-n表示按照数字大小进行排序,
-r表示按照默认的逆序进行输出。
2)Sort和awk的联合使用
#Catprofessor.db
JLuo
Southeastuniversity
Nanjing,china
Yzhang
Victoryuniversity
Melbourne,Australia
Dhou
Beijinguniversity
Beijing,china
Bliu
Shanghaijiaotonguniversity
Shanghai,china
Clin
UniversityofToronto
Toronto,Canada
用sort和awk实现文件块的排序
#catprofessor.db|awk-vRS=”\n\n”‘{gsub(“\n”,”@”);print}’|sort|awk-vORS=”\n\n”‘{gsub(“@”,”\n”);print}’
Cat命令所产生的数据的输出流为:
JLuo\nSoutheastuniversity\nNanjing,china\n\nYzhang\n
Victoryuniversity\nMelbourne,Australia\n\nDhou\nBeijinguni
versity\nBeijing,china\n\nBliu\nShanghaijiaotonguniversity
\nShanghai,china\n\nClin\nUniversityofToronto\nToronto,
Canada\n
Cat命令将输出流数据通过管道符传递给awk命令,第一个awk命令将cat的输出流当成自己的输入流数据进行处理,将“\n”转化成“@”,记录的分隔符“\n\n”,故第一个awk命令的作用就是将不同用户的数据块合并成一条数据记录,再讲这样的记录交给sort命令,sort命令将五条记录进行排序后再交给第二个awk命令,而第二个awk命令的作用则和第一个awk命令的作用正好相反,将五条记录转换成不同用户的书库块,在显示器收到经过处理的数据流后,将经过处理的数据流输出到屏幕上,这样就得到了用户想要的结果。
3)uniq命令
Uniq命令用于去除文件中重复的行,这类似于sort-u选项,但是两者有一定的区别:
Sort-u是将记录按默认的规则排序后在去除重复的行,这样输出的结果中所有的记录只会出现一次,但是uniq则仅仅只是去除了连续的重复记录,也就是说,当文件中有重复的记录,但是该重复的记录并没有连续出现,而是两条相同的记录之间还有其他的记录存在,这样uniq命令则不能去除这样的重复记录,但是sort-u可以。
Uniq命令选项以及含义
选项
意义
-c
打印每行在文本中重复出现的次数
-d
只显示重复的记录,每个重复记录只出现一次
-u
只显示没有重复的记录
统计文件中各个单词出现的次数。
Sed-e‘s/\.//g’-e’s/\,//g’-e‘s/\:
//g’-e‘s//\n/g’input|sort|uniq-c|sort-nr
该语句可以完成统计input文件中各个单词重复出现的次数。
Sed语句的作用是将文件中的所有用“,。
:
”符号连接成的单词拼接成一个单词,sort命令的作用则是将这些单词排序,是重复的单词连续的出现在一起,uniq命令的作用则是将这些单词中,每个单词重复出现的次数统计出来,最后一个uniq命令的作用则是将这些单词按照重复出现次数由大到小输出。
4)join命令
Join命令用于实现两个文件中记录的连接操作
Join命令选项及其意义
选项
意义
-a1或-a2
分别表示左连接和右连接
-i
比较域内容时,忽略大小写
-o
设置结束显示的格式
-t
改变域分隔符
-v1或v2
分别表示显示左表中没有匹配的记录或者右表
-1或-2
用于显示左表或者右表的连接域
#join-t:
-a1TEACHER.DBTEACHER_HOBBY.DB(左连接)
用左表作为驱动表连接右表,默认匹配域是以:
为分隔符的第一个域。
#join-t:
-v1TEACHER.DBTEACHER_HOBBY.DB
显示驱动表(左表)中没有匹配上的记录,-v2表示显示匹配表(右表)中没有匹配上的记录。
#join-t:
-o1.12.21.2TEACHER.DBTEACHER_HOBBY.DB
按照指定的格式输出记录
#join-t:
-i-13-21TEACHER.DBTEACHER_HOBBY.DB
指定匹配域为第一个表的域3和第二个表的域1,-i表示匹配忽略大小写。
A B
Join连接方式是首先是驱动表A,从中拿出一条记录1与匹配表B中的记录进行匹配,A1与B1匹配上则将两条记录进行连接,
A2与B2匹配上后则在表B中做了记录,则下次匹配则从上次结束的地方开始进行匹配,则A3开始从第四条记录开始匹配,直到搜索到最后一条记录也没有找到匹配上,则下一条记录开始进行匹配,也就是说Linux中的join连接的方式是匹配表中的记录从上次匹配上的记录开始进行匹配,而不是每一次都从匹配表的第一条记录开始匹配,这样若两个表中的记录的顺序如果不同有可能连接的结果不同,这就是Linux中join连接和数据库中的连接的不同。
5)cut命令
Cut命令用于从标准输入或者文本文件中按域或者行提取文本。
Cut命令选项及其意义
选项
意义
-c
指定提取的字符数或者字符范围
-f
指定提取的域数或者域范围
-d
改变域分隔符
-c
#cut-c3TEACHER.DB
表示提取每条记录的第三个字符
#cut-d:
-f1,4TEACHER.DB
-d:
域分隔符,表示提取第一个域和第四个域
#cut-d:
-f1-3TEACHER.DB
表示提取第一个域到第三个域之间的部分。
6)paste命令
Paste命令用于将文本文件或者标准输出中的内容粘贴到新文件中,它可以将来自不同文件的数据粘贴到一起形成新的文件。
Paste命令选项以及意义
选项
意义
-d
默认域分隔符是空格或者TAB键,设置行的域分隔符
-s
将每个文件粘贴成一行
-
从标准输入中读取数据
#pastefile1file2
将file1中的内容作为每一行记录的第一个域,file2的内容作为第二个域,中间用TAB键作为分隔符。
#paste-d:
file1file2
用:
作为每条记录的域分隔符。
Sort,join和cut命令改变域分隔符都是为了按域读取文件内容,而paste命令则不同,改变域分隔符是用于设置输出文件的格式。
#paste-d:
-sfile1file2
Paste不加-s选项时,将文本内容“竖着放”,加上-s选项后,将文本内容“横着放”。
#ls|paste-d“:
”-----
将ls的输出作为paste的输入,每5个域作为一条记录进行输出,域分隔符由-d选项指定。
7)split命令
Split命令用于将大文件切割成小文件,split命令可按照文件的行数,字节数切割文件,并能在输出的多个小文件中自动加上编号。
Split命令选项及其意义
选项
意义
-或-l
次两选项等价,都指定切割成小文件的行数
-b
指定切割成小文件的字节数
-C
与-b选项类似,但是,切割时尽量维持每行的完整性
#split-2TEACHER.DBPEO.DB
切割后的小文件的名称,
将文件TEACHER.DB按照每行两个记录进行切割,切割后的小文件名为PEO.DB+aa~zz(PEO.DBaa,PEO.DBab,PEO.DBac)编号,split命令所切割生成的文件最多包含1000行记录。
#split-b100TEACHER.DB
将文件TEACHER.DB按照每100字节进行切分,split命令-b选项在切割文件的时候只考虑文件大小,并不考虑记录的完整性。
#split-C100TEACHER.DB
将文件TEACHER.DB按每100Bytes进行切分,但是切割时并不严格按照100Bytes的大小进行切割,而是在切割时尽量维持每行的完整性。
8)tr命令
tr命令实现字符转换功能,其功能类似于sed命令,但是,tr命令,比sed命令简单,也就是说,tr命令能实现的功能,sed命令都能实现。
“<输入文件”表示将输入文件重定向到标准输入,实际上tr命令与sort,uniq,join等命令不同,他只能从标准输入读取数据,因此,tr命令要么将输入文件重定向到标准输入,要么从管道读入数据。
tr命令选项及其意义
选项
意义
-c
选定字符串1中的字符的补集,反选字符串1中字符集
-d
删除字符集1中出现的所有字符
-s
删除所有重复出现的字符序列,值保留一个
#tr-dA-Z删除文件file1.db中出现的所有大写字母,
#tr-d“[\n]”删除文件file.db中的换行符。
Tr命令支持的控制字符
选项
意义
八进制方式
\a
Ctrl+G铃声
\007
\b
Ctrl+H退格符
\010
\f
Ctrl+L走行换页
\014
\n
Ctrl+J换行符
\012
\r
Ctrl+M回车键
\015
\t
Ctrl+ITab键
\011
#tr-s“[\n]”将文件file.db中出现的连续的换行符进行压缩,使其只不能出现连续的换行符。
#tr-s“[\012]”\012是\n的八进制表示形式。
#tr-s“[A-z]”将文件file.db中的所有的字母连续重复出现的进行压缩,是不连续的重复出现相同的字母。
#tr“[A-Z]”“[a-z]”将文件file.db中的所有的大写字母用小写字母进行替换。
#tr-cs“[A-z]”“[\012*]”-c表示匹配所有的非字母,将所有的非字母转换成换行符,-s表示压缩所有的连续出现的元素,故经-c处理的文件中连续重复出现的“\012”进行压缩,使其只出现一个。
故上面语句的作用是将文件field.db中的所有非字母的元素进行删除。
9)tar命令
Tar命令是Linux中的归档命令,通俗的讲,tar命令实现了Linux系统文件的压缩和解压,类似于Windows中的winRAR软件。
Tar命令选项及其意义
选项
意义
-c
创建新的包
-r
为包添加新的文件
-t
列出包的内容
-u
更新包中的文件,包中无此文件,将该文件添加到包中
-x
解压该文件
-f
使用压缩文件或者设备,该选项通常是必选的
-v
详细报告tar处理文件的信息
-z
用gzip压缩和解压压缩文件,若加上此选项创建压缩包,那么解压时也许加上此选项。
#tar-cfdb.all*.db
将当前目录中所有匹配*.db的文件打包成db.all文件。
#tar-tfdb.all
查看db.all包中的内容。
#tar-rfdb.alllog*
为包db.all中添加匹配log*的所有文件。
tar-cf命令创建的包实际上是将多个文件放在一起,此文件并没有被压缩。
Gzip命令是linux系统中常用的压缩工具,他可以对tar命令创建的包进行压缩。