shell 文件排序合并和分割

sort:
-n 根据大小排序
-k 制定排序的域
-c 检查是否排序
-m 合并两个文件域
-r 逆向排列
-t 改变域分隔符
-u 去除重复行

[root@localhost app]# sort -t: test.txt            ##默认显示文本   -t和:中间没有空格
Dell:HongKong:9822:11:TU9
Hp:china:1182:91:P111
Lianxiang:USA:1232:00:T22
Sanxing:USA:7622:9889:Y0009
Toshiba:USA:989:22:T0909


[root@localhost app]# sort -t: -k3 test.txt        ##显示第三个域 按照 首位数字大小排列
Hp:china:1182:91:P111
Lianxiang:USA:1232:00:T22
Sanxing:USA:7622:9889:Y0009
Dell:HongKong:9822:11:TU9
Toshiba:USA:989:22:T0909

[root@localhost app]# sort -t: -k3n test.txt      ##显示第三个域 按照数值大小排列   从小到大排序
Toshiba:USA:989:22:T0909
Hp:china:1182:91:P111
Lianxiang:USA:1232:00:T22
Sanxing:USA:7622:9889:Y0009
Dell:HongKong:9822:11:TU9

[root@localhost app]# sort -t: -k3nr test.txt    ##显示第三个域 按照数值大小排列   从大到小排序
Dell:HongKong:9822:11:TU9
Sanxing:USA:7622:9889:Y0009
Lianxiang:USA:1232:00:T22
Hp:china:1182:91:P111
Toshiba:USA:989:22:T0909


按照从 大到小排序并且把输入到一个新文件里面:sort -t: -k3nr -o  new-test.txt  test.txt
去除排列结果中重复的行:                    sort -t: -u test.txt
检查测试文件是否排序完毕:                  sort -t: -c test.txt
按照第一域排列合并new-test文件合并后test.txt文件中:sort -t: -m   new-test.txt  test.txt


sort和awk合并使用
将文本按照名字来排列
[root@localhost app]# cat sort.log 
wang
hubei yangxin
zhongguo,china

li
hebei cagnzhou
eshizhongguo sdsd

sun
hunan changsha
changde

wang
hubei ayangxin
zhongguo,china 

[root@localhost app]# cat sort.log | awk -v  RS="" '{gsub("\n","@");print}'  | sort | awk -v ORS="\n\n"   '{gsub("@","\n");print}' 
li
hebei cagnzhou
eshizhongguo sdsd

sun
hunan changsha
changde

wang
hubei ayangxin
zhongguo,china 

wang
hubei yangxin
zhongguo,china

\n              表示换行
RS=""           以空格为分隔符
gsub("\n","@")  将换行与@进行替换 由于每一段文字有换行 所以需要这一步 不知道什么意思可以把整条命令拆分执行就明白了

uniq
-c 统计重复行次数
-d 只显示重复行
-u 不显示重复行

[root@localhost app]# cat shuzi.test 
1111
1111
2222
3333
1111
4444
######源文件 1111有两行是连续重复,另外一行是隔了两行在重复 注意下面
[root@localhost app]# uniq shuzi.test    
1111                        
2222
3333
1111                        
4444
#######只去除了连续重复的行但是隔开的没有去掉    用sort -t: -u可以去掉
[root@localhost app]# uniq -c shuzi.test 
2 1111
1 2222
1 3333
1 1111
1 4444
[root@localhost app]# uniq -d shuzi.test 
1111
[root@localhost app]# uniq -u shuzi.test 
2222
3333
1111
444

你可能感兴趣的:(shell,awk,sort)