Linux文本排序,去重和统计

Linux下的文本处理主要包括以下几点:

1、文本排序

2、文本去重

3、文本统计

4、文本搜索

5、文本替换


本文学习文本排序、去重和统计。

一、文本排序

Shell中是利用sort命令对文本进行排序。

sort [option] filename

如果不加选项,sort会从第一个字母一次开始按照ASCII值比较。默认是按升序排序

文本search.txt: google 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500

命令:sort search.txt baidu 100 5000 google 110 5000 guge 50 3000 sohu 100 4500

2、-r 该选项是按照相反的顺序排序

命令:sort -r search.txt sohu 100 4500 guge 50 3000 google 110 5000 baidu 100 5000

3、-n 按照数值进行排序

100 5000 2 5000

sort -n search.txt

2 5000 100 5000

如果不用-n ,就会先按照ASCII值比较1和2,结果输出: 100 5000 2 5000

3、-k 在指定域开始进行排序

baidu 100 5000 google 110 5000 guge 50 3000 sohu 100 4500

我们想从第二列排序 命令: sort -k2.1n search.txt guge 50 3000 baidu 100 5000 sohu 100 4500 google 110 5000

4、-t 指定特定分隔符,区分列,一般与-k配合使用

如果不加这项,默认是按照空格划定的。 baidu:100: 5000 google :110 :5000 guge :50 :3000 sohu :100 :4500 命令:sort -t : -k2n search.txt

guge:50:3000 baidu:100:5000 sohu:100:4500 google:110:5000

5、 +n 按指定域进行分类,与 -k作用相同。

sort -t : +2n search.txt

6、-n 表示忽略掉某域。

sort -t : -k2n -2 search.txt 忽略掉第二列。

7、其他选项

1、-o 输出重定向,将结果重定向文件中,可以将源文件覆盖。 命令:sort -t : -k2n search.txt -o search.txt。 如果直接用sort -t : -k2n search.txt >search.txt。会将源文件清空。

2、-f 将小写转换为大写。 3、-b 忽略每一行前面的所有空白部分,从第一个可见字符开始比较。 4、-m 将两个已经排序好的文件进行合并,不会重新排序 5、-M 按照日期的前三个字母进行排序。

8、sort -u去除重复行,进行排序

这个放在最后主要是要和uniq进行比较,它主要是出去所有重复行。


二、文本去重

文本去重主要有两种方式:
1. uniq
2. sort -u

sort -u 在前面已经提到了,可以去除所有的重复行,然后进行排序。而uniq只能去重相邻的重复行,不相邻的不能去重。现在对uniq用法进行详解。

uniq :

  • -d 只打印重复行;
  • -u 只打印非重复行;
  • -c 打印每一重复行出现的次数(意思是不重复的就打印一次)
  • -f N忽略掉 前N个域;

如果不加选项,就直接取出相邻的重复行,注意这里只能去重相邻的重复行。

cat duplicate.txt

haibo ,please persisit and be patient whatever you may come across with. haibo ,please persisit and be patient whatever you may come across with. I love Python,and I'm confident on myself. haibo ,please persisit and be patient whatever you may come across with. I love Python,and I'm confident on myself. I love Python,and I'm confident on myself.

uniq duplicate.txt

haibo ,please persisit and be patient whatever you may come across with. I love Python,and I'm confident on myself. haibo ,please persisit and be patient whatever you may come across with. I love Python,and I'm confident on myself.

sort -u duplicate.txt

haibo ,please persisit and be patient whatever you may come across with. I love Python,and I'm confident on myself.

两者的区别清晰可见。

三、文本统计

文本统计主要应用wc命令,当然后续涉及到awk之类的,不过awk很久没用了,有点忘了,我会继续学习并记录。

wc:

  • -l 显示文件中的行数 (包含空行);
  • -c 统计字节数;
  • -w 统计单词数;
  • -m 统计字符数;
  • -L 统计最大长度行的长度;

另外延伸两个命令:
1. head显示文件投 N行;
2. tail显示文件末尾N行;

如果不加参数,默认是10行。

接下来要学习文本搜索,文本替换。也就是shell命令的三大命令:grep,sed,awk。

--------EOF---------
微信分享/微信扫码阅读