命令介绍:
sort :将文本文件内容加以排序。
sort -u [file] = sort [file] | uniq (去重)
参数说明
-b 忽略每行前面开始出的空格字符
-c 检查文件是否已经按照顺序排序
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f 排序时,将小写字母视为大写字母
-l 排序时,除了040至176之间的ASCII字符外,忽略其他的字符
-m 将几个排序好的文件进行合并
-M 将前面3个字符依照月份的缩写进行排序
-n 依照数值的大小排序
-o<输出文件> 讲排序后的结果存入指定的文件
-r 以相反的顺序来排序
-t<分隔字符> 指定排序时所用的栏位分割字符
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始兰位到结束栏位的前一栏位
--help 显示帮助
--version 显示版本信息
-u 对排序后认为相同的行只留其中一行
uniq : 检查及删除文本文件中重复出现的行列。
语法:uniq[选项] 文件
最重要参数: 默认(去重) | -d(显重) | -u(删重)
参数
-c或--count 在每列旁边显示该行重复出现的次数
-d或--repeat 仅显示重复出现的行列
-f<栏位>或--skip-fields=<栏位> 忽略比较指定的栏位
-s<字符位置>或--skip-chars=<字符位置> 忽略比较指定的字符
-u或--unique 仅显示出一次的行列
-w<字符位置>或--check-chars<字符位置> 指定要比较的字符
--help 帮助信息
--version 版本信息
comm 命令详解:
功能说明:比较两个已排序的文件
语法: comm [-123][--help][--version][第一个文件][第二个文件]
补充说明:这项指令会一列列的比较两个已排序文件的差异,并将其结果显示出来。如果没有指定任何参数,则会把结果分成3行显示,第1行是仅在第一个文件中出现的列,第2行是仅在第二个文件中出现过的列,第3行则是在两个文件中都出现过的列。若给予的文件名称是"-",则comm指令会从标准输入设备中读取数据。
参数:
-1 不显示在第1个文件中出现的列
-2 不显示在第2个文件中出现的列
-3 不显示只在第1或第2个文件中出现的列
选项1 2和3抑制相应的列显示,例如
comm -12 显示两个文件中都出现的行
comm -23 显示在第1个文件出现,而不是在第2个文件出现的行
comm -123 什么都不显示
注意:uniq 和 comm 命令需要使用已经排序好的内容才有意义。注意文件格式要为unix
一些例子:
第一:两个文件的交集,并集
前提条件:两个文件不得有重复的行(即两个文件都要去重)
1. 取出两个文件的并集 cat file1 file2 | sort | uniq >file3
2. 取出两个文件的交集 cat file1 file2 | sort | uniq -d >file3
3. 删除交集 cat file1 file2 | sort |uniq -u
第二:两个文件合并
1. 一个在上一个在下 cat file1 files2 >file3
2. 一个在左一个在右 paste file1 file2 >file3
3. cat file1 >> file2
第三:一个文件去掉重复行
1. sort file | uniq 把重复的行合并为一行
2. sort file | uniq -u 把重复的行删除,仅保留非重复的行
参考:http://blog.csdn.net/wud_jiyanhui/article/details/7620150
主要内容:sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令、tar命令
sort 命令:
Linux的sort命令就是一种对
文件排序的工具,sort命令的功能十分强大,是Shell脚本编程时常用的文件排序工具;
sort命令与awk一样,将
文件看作
记录和域进行处理,默认的域分隔符是空格符,sort命令的格式为:
sort [选项] [输入文件]
选项 意义
-c 测试文件是否已经被排序 complete
-k 指定排序的域 k1 k2nr 往后加命令即可
-m 合并两个已排序的文件 merge
-n 根据数字大小进行排序 number
-o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件 open
-r 将排序结果逆向 reverse
-t 改变域分隔符 eg:-t: 一般最新定义
-u 去除结果中的重复行 unique -u
uniq 命令
uniq命令用于去除文本文件中的重复行,这类似于sort命令的-u选项
sort -u命令时,所有重复记录都被去掉
uniq命令去除的重复行必须是
连续重复出现的行
,
中间不能夹杂任何其他文本行
选项 意义
-c 打印每行在文本中重复出现的次数 count
-d 只显示有重复的记录,每个重复记录只出现一次
-u 只显示没有重复的记录 unique
join 命令
join---
实现两个文件中记录的连接操作
,连接操作将两个文件中具有相同域的记录选择出来,再将这些记录所有的域放到一行(包含来自两个文件的所有域)
join [选项] 文件1 文件2
选项 意义
-a1或-a2 除了显示以共同域进行连接的结果外,-a1表示还显示第1个文件中没有共同域的记录,-a2则表示显示第2个文件中没有共同域的记录
-i 比较域内容时,忽略大小写差异
-o 设置结果显示的格式
-t 改变域分隔符
-v1或-v2 跟-a选项类似,但是,不显示以共同域进行连接的结果
-1和-2 -1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
当两个文件进行连接时,文件1中的记录可能在文件2中找不到共同域,反过来,文件2中也可能存这
在样的记录,join命令的结果默认是不显示这些未进行连接的记录的
-a和-v选项就是用于显示这些未进行连接的记录,-a1和-v1指显示文件1中的未连接记录,而-a2和-v2指显示文件2中的未连接记录
-a和-v选项的区别在于:
-a选项显示以共同域进行连接的结果,而
-v选项则不显示这些记录
当两个文件进行连接时,文件1中的记录可能在文件2中找不到共同域,反过来,文件2中也可能存在这样的记录,join命令的结果默认是不显示这些未进行连接的记录的
-a和-v选项就是用于显示这些未进行连接的记录,-a1和-v1指显示文件1中的未连接记录,而-a2和-v2指显示文件2中的未连接记录
-a和-v选项的区别在于:-a选项显示以共同域进行连接的结果,而-v选项则不显示这些记录
join命令默认显示连接记录在两个文件中的所有域,而且是按顺序来显示的。-o选项用于改变结果显示的格式
join命令
默认比较文件1和文件2的
第1域,如果我们需要通过其他域进行连接,就需要使用
-1和-2选项,-1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
join -t: -i -1 3 -2 1 TEACHER1.db TEACHER_HOBBY.db
cut 命令
cut命令用于从标准输入或文本文件中按域或行提取文本
选项 意义
-c 指定提取的字符数,或字符范围 count
-f 指定提取的域数,或域范围 field
-d 改变域分隔符
cut -c1-5 TEACHER.db
cut -d: -f1,4 TEACHER.db
cut -d: -f1-3 TEACHER.db
paste 命令
paste命令用于将文本文件或标准输出中的内容
粘贴到新的文件,它可以将来自于不同文件的数据粘贴到一起,形成新的文件
paste [选项] 文件1 文件2
选项 意义
-d 默认域分隔符是空格或Tab键,设置新的域分隔符
-s 将每个文件粘贴成一行
- 从标准输入中读取数据
paste命令的“-”选项比较特殊,当paste命令从标准输入中读取数据时,“-”选项才起作用
eg:[root@jselab shell-book]#
ls | paste -d" " - - - - - #从标准输入读取数据
anotherres.sh array_eval2.sh colon.sh example execerr.sh #每行显示5个文件名
execin.sh exec.sh FILE1 FILE2 forever.sh
hfile loggg loggg1 loopalias.sh matrix.sh
newfile nokillme.sh part1 part2 part3
parttotal refor.sh reif.sh selfkill.sh sleep10.sh
sleep55.sh stack.sh subsenv.sh subsep.sh subsig.sh
subsparallel.sh subspipe.sh subsvar.sh TEACHER.db test.sh
testvar.sh traploop.sh
split 命令
split命令用于将大文件切割成小文件,split命令可以按照文件的行数、字节数切割文件,并能在输出的多个小文件中自动加上编号
split [选项] 待切割的大文件 输出的小文件
选项 意义
-或-l 此两个选项等价,都用于指定切割成小文件的行数
-b 指定切割成小文件的字节
-C 与-b选项类似,但是,切割时尽量维持每行的完整性
tr 命令
tr命令实现
字符转换功能,其功能类似于
sed命令,但是,tr命令比sed命令简单
tr命令能实现的功能,sed命令都可以实现
tr [选项] 字符串1 字符串2 <输入文件
tr命令要么将
输入文件重定向到标准输入,要么从
管道读入数据,记住tr命令的输入文件之前需要加上“
<”符号
选项 意义
-c 选定字符串1中字符集的
补集,即反选字符串1中的字符集
-d 删除字符串1中出现的所有字符
-s 删除所有
重复出现的字符序列,只保留一个
tr命令的-d选项只需跟一个字符串,它表示删除字符串中出现的所有字符
tr -d A-Z
tr命令的-s选项用于删除所有重复出现的字符序列,只保留一个,即将重复出现的字符串压缩为一个字符spress
tr -s "[a-z],[A-Z]"
tr命令也可以加上字符串1和字符串2,将字符串1用字符串2来
替换
tr命令的-c选项用于选定字符串1中字符集的补集,即反选字符串1中的字符集contract
tr -cs "[a-z][A-Z]" "[\012*]"
tar 命令
tar命令是Linux的
归档命令
,tar命令可以将文件或目录打成一个
包
tar [选项] 文件名或目录名
选项 意义
-c 创建新的包 create
-r 为包添加新的文件 refresh
-t 列出包内容
-u 更新包中的文件,若包中无此文件,则将该文件添加到包中
-x 解压缩文件
-f 使用压缩文件或设备,该选项通常是必选的 file
-v 详细报告tar处理文件的信息 view
-z 用gzip压缩和解压缩文件,若加上此选项创建压缩包, gzip
那么解压缩时也需要加上此选项
-f是必选选项,-c选项用于创建包
tar -cf db.all *.db
-r选项可将文件添加到包
-t选项用于查看包的内容
tar -tf db.all
tar命令的另一重要功能就是解压缩,以下两种解压缩命令足以满足一般应用要求:
tar -xvf 压缩包名称 #解压非gzip格式的压缩包
tar -zxvf 压缩包名称 #解压gzip格式的压缩包
tar -zxvf db.all.gz
gzip命令是Linux系统中常用的
压缩工具,它可以对tar命令创建的
包进行压缩,但是,gzip所生成的压缩包使用
tar -zxvf命令就可解压缩
转自: http://blog.sina.com.cn/s/blog_6bd7d9430101504l.html
例子: 简单的用法如下,如一个文件名:happybirthday.txt
cat happybirthday.txt (显示文件内容)
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday Dear Tux!
Happy Birthday to You!
cat happybirthday.txt|sort (排序)
Happy Birthday Dear Tux!
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday to You!
cat happybirthday.txt|sort|uniq (去重复行)
Happy Birthday Dear Tux!
Happy Birthday to You!
去大文件重复行
但有时碰到一个大文件时(例如G级的文件),用上面的命令时报错,提示空间不足。我尝试了一下,最后是用 split 命令把大文件分割为几个小文件,单独排完序后再合并 uniq 。
split -b 200m happybirthday.big Prefix_
用-b参数切割happybirthday.big,小文件为200M。切割后的文件名前缀是Prefix_切割后的文件名如
Prefix_aa
Prefix_ab再分别sort
sort Prefix_aa >Prefix_aa.sort
sort Prefix_ab >Prefix_ab.sort再用 sort -m合并,再 uniq
cat Prefix_aa.sort Prefix_ab.sort |sort -m |uniq这是好早前碰到的一个问题了。没记错的话应该是这么回事。~
sort 与 uniq 命令还有许多有用的参数,如sort -m、uniq -u、uniq -d等。sort 与 uniq的组合是很强大的。
转自:http://linux.chinaitlab.com/administer/829487.html