Linux 文本处理工具

    wc 打印行、词、字节的数量

    cut 按列切分文本

    sort 排序

    uniq 消除重复行

wc 打印行、词、字节的数量


语法:

    wc [OPTION]... [FILE]...

选项:

    -l:line 统计行数

    -w:words 统计单词数

    -c:characters 统计字符数

示例:

[zdw@note1 ~]$ cat wctest
hello world 123
[zdw@note1 ~]$ wc -l wctest    #统计行数
1 wctest
[zdw@note1 ~]$ wc -w wctest    #统计单词数
3 wctest
[zdw@note1 ~]$ wc -c wctest    #统计字符数
16 wctest

cut 按列切分文本


语法:

    cut OPTION... [FILE]...

选项:

    -d delimiter:指明分隔符(可以不用加空格)

    -f fields:指定字段

        #:第#个字段

        #,#[,#]:离散的多个字段,例如1,3,6

        #-#:连续的多个字段,例如1-6


    混合使用:1-3,7

    --output-delimiter=STRING  #把string换成想要的分隔符就成

示例:

[root@node1 ~]# cut -d: -f 1,7 /etc/passwd                            #以:为分隔显示第1和第7列
[root@node1 ~]# cut -d: -f 1,7 --output-delimiter=' ' /etc/passwd     #把:分隔符改为空格

sort 排序


语法:

    sort [OPTION]... [FILE]...

选项:

    -b:忽略开头的空白

    -f:忽略字符大小写

    -r:逆序

    -t:DELIMITER:分隔符

    -k #:以指定字段为标准排序

    -n:以数值大小进行排序

    -u:uniq,排序后去掉重复显示

[root@node1 ~]# sort -t: -k3 -n /etc/passwd                 #以:分隔符以数值大小进行排序
[root@node1 ~]# sort -t: -k3 -n /etc/passwd |cut -d: -f3    #接上,看得更清楚

uniq 消除重复行


uniq命令在思想上和sort -u类似,但它有一些sor不能模拟的选项:-c累计每行出现的次数,-d只显示重复行,而-u只显示不重复的行。uniq命令的输入必须先排好序,因此通常把它放在sort命令之后运行。

语法:

    uniq [OPTION]... [INPUT [OUTPUT]]

选项:

    -c:显示每行重复出现的次数

    -d:仅显示重复过的行

    -u:仅显示不曾重复的行


    Note:连续且完全相同方为重复

[root@pop3 ~]# cat number                  #测试文件

tres

unus

duo

tres

duo

tres

[root@pop3 ~]# sort number | uniq         #显示唯一的、排序后的记录,重复则仅取唯一行

duo

tres

unus

[root@pop3 ~]# sort number | uniq  -c     #计数唯一的、排序后的记录

      2 duo

      3 tres

      1 unus

[root@pop3 ~]# sort number | uniq  -d     #仅显示重复的记录

duo

tres

[root@pop3 ~]# sort number | uniq  -u     #仅显示不重复的记录

unus


[root@node1 ~]# history | cut -d' ' -f5 | sort -u        #查看历史命令,sort -u去掉重复的
[root@node1 ~]# history | cut -d' ' -f5 | uniq           #使用uniq命令,不连续的相同命令还是显示
[root@node1 ~]# history | cut -d' ' -f5 | sort | uniq
[root@node1 ~]# history | cut -d' ' -f5 | sort | uniq -c #使用uniq -c,能把重复几次显示出来


练习:以冒号分隔,取出/etc/passwd文件的第6至第10行,并将这些信息按第3个字段的数值大小进行排序,最后仅显示各自的第1个字段

[zdw@note1 ~]$ cat /etc/passwd | head -n 10|tail -n 5|cut -d: -f3 | sort -n
5
6
7
8
10


参考:

shell脚本学习指南 P90