首页 > 代码库 > 文本处理命令——统计、切割

文本处理命令——统计、切割

wc:

   wc [option] ... [file]...

   -l:只显示行数

   -w:只显示字数

   -c:只显示字符数

    用处:有的时候我们可以用来统计一个文件里的内容,或者统计输出内容的字数等

    例如:

        1.显示/etc/passwd中的总行数

          ~]$ wc -l /etc/passwd                
            52 /etc/passwd

        2.通过管道线显示/etc/passwd中的总行数

          ~]$ cat /etc/passwd | wc -l
            52

        3.直接输出字数统计

          ~]$ echo "ab cd ef" | wc -w
            3


cut:remove sections from each line of files

    -d:指定用来修剪文档的分割字符,默认是空字符

    -f:根据定义的分隔符来指定字段编号

    地址定界使用法:

    #:选择被指定的单个字符;

    #,#:离散的多个被指定的单个字符;

    #-#:连续的多个被指定的字段;

    --output-delimiter-string:指定输出分隔符;

    用处:有的时候需要分割字符,得到一些由特殊的字或者字符分开的单独的字符串

    例如:(d来分割字符串,f选取分割出来的第几个字符串)

        ~]$ echo "a+b+5+9" | cut -d "+" -f 1-3
           a+b+5
        ~]$ echo "a+b+5+9" | cut -d "+" -f 1
           a
        ~]$ echo "a+b+5+9" | cut -d "+" -f 1,4


awk:

    awk -F “DELIMITER” ‘[/PATTERN/]{print $1,$2...$NF}‘

    $1,$2...$NF:根据字段分隔符切割出来的文本片段都存放在相应的内部

    变量中;

    -F:指定分隔符;默认为空白字符

    awk -F ‘/‘ ‘{print $NF}‘ files(以/为分隔符)

    用处:这个方法要比cut命令更加优秀,能够直接取出想要的内容

    例如:

        ~]$ echo "a+b+5+9" | awk -F "+" ‘{print $1,$2,$3}‘
          a b 5

 

sort:sort - sort lines of text files将文本文件按行排序;,默认排序规则是按ASCLL表中的字符顺序进行的,这个排序标准可修改;

      -R:把文件随机排序;这种随机算法非常简陋,不适于复杂环境;

      -r:逆序排序;按ascll码逆序排序

      -u:去重,重复出现的行只保留一行;连续且完全相同的行叫重复;

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

      -t:指定字段分隔符;

      -k:指明根据哪个字段进行排序,一般和-t同时使用;

      -f:忽略大小写区别;

      sort  -t : -k 3 /etc/passwd(根据:为分隔符的第三个字段进行排序)

    用处:对文本进行排序等操作

    举例:

1.对/etc/passwd的前五行按照首字母进行排序输出

~]$ head -5 /etc/passwd | sort    
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash

2.对/etc/passwd的前五行的每行用“:”进行分开,然后按照第三个字段的首字母进行排序

~]$ head -5 /etc/passwd | sort  -t : -k 3    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


uniq:

    -d,--repeated:只显示重复出现的行,而且每一组重复的行只显示一行;

    -u,--unique:只显示不重复的行;

    -c,--count:在显示的行前面加一个次数,即重复出现的次数;

    用处:超找重复的行

    举例:

        创建一个文本包含以下内容:

~]$ cat uniq    
    asd
    zxc
    qwe
    zxc
    zxc

    然后对这个文本使用uniq命令,会把重复的行只显示一行(注意:不挨着的重复行不算重复行,如第二行和第四行)

~]$ uniq uniq        
        asd
        zxc
        qwe
        zxc

    使用-d命令只显示重复的行,就是源文件中的第四行和第五行,但是只显示一次:

~]$ uniq -d uniq        
        zxc

    使用-c命令显示重复的次数

~]$ uniq -c uniq
      1 asd
      1 zxc
      1 qwe
      2 zxc


diff:compare files line by line,比较两个文件的不同

    用处:比较文件之间的不同

    举例:

     创建两个文件:

]$ cat file1     
    sd
    asd
    qwe
    zxc
]$ cat file2    
    sd
    asd
    qwe
    a
    zxc
    asd

然后使用diff命令判断两个文件的不同之处

]$ diff file1 file2    
    3a4
    > a
    4a6
    > asd

可以看出file1文件和file2文件的不同之处在第三行多了个a,第四行多了个asd

这个命令可以用来保存版本,比如说当你在一个文件中写入了一些内容,但是不知道写入了哪些,就可以使用这个命令查看。在日常软件开发中也可以使用这个命令和patch命令组合使用,实现文本或软件的升级或降级。

文本处理命令——统计、切割