Linux技巧(二):Linux sort命令深入解析 |
您所在的位置:网站首页 › 数字大小单位字母 › Linux技巧(二):Linux sort命令深入解析 |
前言
目的:逐步带你了解sort排序,解开-k参数的困惑。 困惑之处:sort -k 1.2,1.2 1.2是什么意思?1.2,1.2又是什么鬼?为什么sort -k 1.2和sort -k 1.2,1.2的排序结果不一致? 本文带你逐步解析。 一、sort语法、参数、及其注意事项 1、语法语法: sort [-bcdfimMnr][-o][-t][+-][--help][--verison][文件] 2、参数参数: -b 忽略每行前面开始出的空格字符。从第一个可见字符开始比较。 -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。 -f 排序时,忽略字符大小写. -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。 -c 检查文件是否已经按照顺序排序。 -m 将几个排序好的文件进行合并。 -M 前面3个字母依照月份的缩写进行排序。 -n 依照数值的大小排序。 -o 将排序后的结果存入指定的文件。 -r 降序排列(默认是升序)。 -t 指定排序时所用的栏位分隔字符。 -k field1[,field2] 按指定的列进行排序。 -u 排序后相同的行只显示一次(默认按整行进行比较) --help 显示帮助。 --version 显示版本信息。 3、注意事项1、排序时,默认是按每行/每个域的首字符排序,数字的优先级要大于字符的优先级 2、不指定升序还是降序时,默认是升序 4、重点难点重点掌握:-t -n -o -u - k,尤其是-k。 其他的参数相对比较容易掌握。 二、案例数据准备 #vim salary.txt 编辑测试文件数据(工资表,里面的数据是虚拟的)google 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500 sohu 30 1500 #vim tt.txtdell 100 10020 ee lenovo 200 12202 a huawei 500 13004 ff cisco 300 24005 bb #cp tt.txt t.txt #vim t.txt随意在里面添加一些空格,便于暴露出了-t的不足之处。 dell 100 10020 ee lenovo 200 12202 a huawei 500 13004 ff cisco 300 24005 bb 三、通过案例,由浅入深了解sort 1、-r 指定排序 #sort salary.txt 默认根据首行的首字母,升序排列 #sort -r salary.txt 按首行的首字母,降序排列 注:此时,暂不涉及复杂的排序,你想要的排序在-t、-k 这些高级参数里面(先了解-r参数为主)。 2、-t 指定分隔符,并用-k 指定按哪个域进行排序 1.-t 用空格做分隔符的注意事项-t 如果需要用空格作为分隔符,-t ' ' 和 -t " " 效果是一样的(引号中间,只能有1个空格!) sort -t ' ' -k 4 tt.txt 以空格为分隔符,按第4个域进行排列(答案:符合预期) sort -t ' ' -k 4 t.txt 以空格为分隔符,按第4个域进行排列(答案:不符预期)注:在准备工作中,tt.txt中的数据是规则的,彼此之间只有1个空格; t.txt中的数据是不规则的,彼此之间空格随机。 到此得出结论:-t ‘ ’直接处理不规则的文本格式,是难以胜任的,如果一定要这么做,需要对文件预处理一遍,达到-t的使用场景。 当然,如果-t 用其他特殊字符时(如冒号:),比空格会要好用一些。 2.-t 常用组合 -k 和 -n (同时指定多个域进行排序)题目:在salary中,按薪水进行降序排列,薪资相同时,按公司人数升序排列。 sort -t' ' -n -k 3r -k 2 salary.txt注:-n是全局参数,所有指定的域都有效(按数值排序);3r中的紧跟这数字的r是局部参数,仅对-k 3r中r前面的数字所对应的第3个域有效。后面的 -k 2 没有指定降序,那么默认第2个域就是升序排列的。 ![]() 在sort排序中,如果用 > 重定向来把结果输出到源文件,源文件会被置为空。 此时,-o的作用就凸显出来了。 #cp salary.txt s.txt 复制一份测试数据 #sort -t' ' -k 3r s.txt -o s.txt 排序后,内容用-o输出回原文件 #cat s.txt 发现内容重新按工资高低排序了 #sort -t' ' -k 3 s.txt > s.txt 排序后,内容重定向回原文件 #cat s.txt 发现内容被清空了 实验结果表明:如果要把排序的结果回写到源文件,需要用-o参数,不能用重定向。 4、-n按数值大小排序(重点)sort在实际排序过程中: 如果不用参数-n,则会把数字当做字符来排序 出现10 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |