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

来源:互联网 发布:锐捷mac怎么设置 编辑:程序博客网 时间:2024/04/28 08:12

sort

sort [option] inputfile
选项及其意义:

option desc -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
选项及其意义:

option desc -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

选项及其意义:

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

-c格式:

  • -cn :第n个字符
  • -cn,m :第n,m个字符
  • -cn-m :第n至m个字符
    -f格式与-c一样

paste

paste将标准输入或文件中的内容粘贴到新的文件。多个文件按列对列进行粘贴
paste [option] inputfile outfile
选项及其意义:

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

e.g.

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

split

用于切割文件
split [option] input output
选项及其意义:

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

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

tr

tr实现字符转换
tr [option] 字符串1 字符串2 输入文件
选项及其意义:

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

e.g.

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

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

标记 速记符 含义 八进制方式 \a Ctrl-G 铃声 \007 \b Ctrl-H 退格符 \010 \f Ctrl-L 走行换页 \014 \n Ctrl-J 新行 \012 \r Ctrl-M 回车 \015 \t Ctrl-I tab键 \011 \v Ctrl-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

原创粉丝点击