您的位置:首页 > 运维架构 > Shell

Shell文件的排序、合并和分割

2017-06-15 20:27 218 查看

sort

sort [option] inputfile

选项及其意义:

optiondesc
-b忽略每行前面开始出的空格字符;
-c检查文件是否已经按照顺序排序;
-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f排序时,将小写字母视为大写字母;
-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m将几个排序号的文件进行合并;
-M将前面3个字母依照月份的缩写进行排序;
-n依照数值的大小排序;
-o<输出文件>将排序后的结果存入制定的文件;
-r以相反的顺序来排序;
-t<分隔字符>指定排序时所用的栏位分隔字符;默认是空格符
+<起始栏位>-<结束栏位>以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
-k\< num >指定排序域。1表示第一域,2表示第二域。
-u对结果进行去重
e.g.

sort -t: -k3n inputfile

-k的使用

-k选项的语法格式:

FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
FStart.CStart 选项 , FEnd.CEnd 选项


这个语法格式可以被其中的逗号,分为两大部分,Start部分和End部分。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

e.g.

#从公司英文名称的第二个字母开始进行排序
$ sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000

#只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序

$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000


uniq

uniq [option] inputfile

选项及其意义:

optiondesc
-c或——count在每列旁边显示该行重复出现的次数;
-d或–repeated仅显示重复出现的行列; 每个记录仅显示一次
-f<栏位>或–skip-fields=<栏位>忽略比较指定的栏位;
-s<字符位置>或–skip-chars=<字符位置>忽略比较指定的字符;
-u或——unique仅显示出不重复的行列;
-w<字符位置>或–check-chars=<字符位置>指定要比较的字符。

e.g.

uniq 与 sort -u的区别

sort -u所有的重复行都会被去除。

uniq 去除的重复行必须是连续出现的。

join

join [option] file1 file2

选项及其意义:

option|desc

-|-

-a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行; 相当于left join ,right join

-e<字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串;

-i或–ignore-case:比较栏位内容时,忽略大小写的差异;

-o<格式>:按照指定的格式来显示结果;

-t<字符>:使用栏位的分割字符;

-v<1或2>:更-a相同,但是只显示文件中没有相同栏位的行;

-1<栏位>:连接[文件1]指定的栏位; -2<栏位>:连接[文件2]指定的栏位。

-a与-v的区别:

-a显示显示匹配的记录。-v不显示匹配的记录。

-o

join默认显示2个文件中的所有域,-o用于改变显示结果。

bash

#显示2个文件的前2列

join -t: -o1.1 1.2 2.1 2.2 file1


-1,-2

join默认指定2个文件的第一个域进行join,-1,-2指定2个文件进行join的域

cut

cut用于从标准输入或文件中按域或行提取数据。

cut [option] file

选项及其意义:

optiondesc
-c指定提取的字符数或字符范围
-f指定提取的域数或域范围
-d改变域分割符

-c格式:

-cn :第n个字符

-cn,m :第n,m个字符

-cn-m :第n至m个字符

-f格式与-c一样

paste

paste将标准输入或文件中的内容粘贴到新的文件。多个文件按列对列进行粘贴

paste [option] inputfile outfile

选项及其意义:

optiondesc
-s每个文件粘贴为一行,默认按列粘贴
-从标准输入中读取文件
-d改变域分割符,默认是空格或tab

e.g.

#每行显示5个文件
ls | past -d“ ” - - - - -


split

用于切割文件

split [option] input output

选项及其意义:

optiondesc
-或-l用于指定文件切割的行数
-b用于文件切割的大小,单位字节
-C同-b,但切割时尽量保持每行的完整性
-d使用数字作为后缀
-a指定后缀长度,-a 3,长度为3

文件切割时默认加上编号,aa~zz,当不指定小文件名字时,默认为x。

tr

tr实现字符转换

tr [option] 字符串1 字符串2 输入文件

选项及其意义:

optiondesc
-c选定字符串1中的补集,即反选字符串1中的补集
-d删除字符串1中的所有字符
-s删除所有重复出现的字符序列,只保存1个

e.g.

#删除所有大写字母
tr -s A-Z file


tr支持部分正则表达式,例如A-Z 0-9 A*3,tr支持POSIX字符以及控制字符

标记速记符含义八进制方式
\aCtrl-G铃声\007
\bCtrl-H退格符\010
\fCtrl-L走行换页\014
\nCtrl-J新行\012
\rCtrl-M回车\015
\tCtrl-Itab键\011
\vCtrl-X\030
注意这些控制字符,如果想在linux下输入,如我们可能需要输入^M这种字符,只需ctrl+V+M同时按下即可。

tar

tar [-cxtzjvfpPN] 文件与目录 ….

-c:建立一个压缩文件的参数指令(create 的意思);

-x:解开一个压缩文件的参数指令!

-t:查看 tarfile 里面的文件!

-r:向压缩归档文件末尾追加文件

-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.

特别注意,在参数的下达中, c/x/t/r/u 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。

-z:有gzip属性,即需要用 gzip 压缩
-j:有bz2属性,即需要用 bzip2 压缩
-Z:有compress属性的
-v :压缩的过程中显示文件(显示所有过程)!这个常用,但不建议用在背景执行过程!
-O:将文件解开到标准输出
-f :使用档名,请留意,在 f 之后要立即接档名!不要再加参数!例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
# tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
# tar -tf all.tar 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
# tar -xf all.tar 这条命令是解出all.tar包中所有文件,-x是解开的意思


1、*.tar 用 tar –xvf 解压

2、*.gz 用 gzip -d或者gunzip 解压

3、.tar.gz和.tgz 用 tar –xzf 解压

4、*.bz2 用 bzip2 -d或者用bunzip2 解压

5、*.tar.bz2用tar –xjf 解压

6、*.Z 用 uncompress 解压

7、*.tar.Z 用tar –xZf 解压

rev

rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推

colrm

colrm命令用于删除文件中的指定列。colrm命令从标准输入设备读取数据,转而输出到标准输出设备。如果不加任何参数,则colrm命令不会过滤任何一行。

colrm 开始列号 结束列号 < file
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: