路漫漫其修远兮
吾将上下而求索

linux文本处理:wc,cut,sort,uniq,tr命令

文本查看及文本处理工具

1、WC命令

1、作用:Print  newline,  word,  and byte counts for each FILE, and a total line if more than one FILE is specified,统计行数,单词和字节,如果指定多个文件的话,统计总行数

2、格式:wc [OPTION]… [FILE]…

3、选项:

-l:lines
-w:words  单词
-c:bytes  字节

4、示例:

[root@localhost ~]#wc /etc/fstab    #从左往右,行数,单词书,字节数
 16  84 899 /etc/fstab
 
[root@localhost ~]#wc -c /etc/fstab     #统计总字节数
899 /etc/fstab

[root@localhost ~]#cat /etc/fstab |wc -l    #这也是一种方法
16

[root@localhost ~]#wc /etc/fstab /etc/issue    #如果指定多个文件的话,最后会显示总数
 16  84 899 /etc/fstab
  3   9  47 /etc/issue
 19  93 946 total

2、cut命令

1、作用:文本文件按类型分切

2、格式:cut [OPTION]… [FILE]…

3、选项:

-d --delimiter:以指定字符为分隔符
-f --fields:挑选出的字段
-c --characters:挑选的字符段
#:指定的单个字段
#-#:连续的多个字段
#,#:离散的多个字段

选项和选项参数之间可以没有空格

4、示例:

[root@localhost ~]#cut -d : -f 1,3-5,7 /etc/passwd
root:0:0:root:/bin/bash
bin:1:1:bin:/sbin/nologin

[root@localhost ~]#cut -c2-5 /etc/fstab    #只将每一行的第2-5个字符取出来
UID=
UID=

3、past:合并两个文件同行号的列到一行

i. paste [OPTION]… [FILE]…

1. -d –delimiters:分隔符,指定分隔符,默认用tab

2. -s –serial:所有行合成一行显示

3. # paste -d: /etc/passwd /etc/fstab

4. paste -s  /etc/passwd /etc/fstab

4、sort:排序

1、作用:将文本文件中的行排序

2、格式:sort [OPTION]… [FILE]…

-n:--numeric-sort,基于数值大小而非字母进行排序
-t --field-separator:指定分隔符
-k #:用于排序比较的字段
-r:reverse,逆序排序
-f --ignore-case:忽略字符大小写
-u:--unique,重复的行只保留一份,重复行:连续且相同

3、示例

1)默认情况下排序是按照字母进行排序的,即1,2,10排序后为:1,10,2 先比较第一个字母如果相同,再比较第二个字母,然后排序

[root@localhost ~]#head /etc/passwd > abc
[root@localhost ~]#cat abc
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

[root@localhost ~]#cut -d: -f3 abc 
0
1
2
3
4
5
6
7
8
10

[root@localhost ~]#cut -d: -f3 abc | sort
0
1
10
2
3
4
5
6
7
8

[root@localhost ~]#cut -d: -f3 abc | sort -nr    #如果想要按照数字进行排序,要加:-n选项
10
8
7
6
5
4
3
2
1
0

[root@localhost ~]#cat abc
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

[root@localhost ~]#sort -t: -k 4 abc    #以:为分隔符,按第4个字段将整个文件进行排序
halt:x:7:0:halt:/sbin:/sbin/halt
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
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


#当要统计不重复的数据量有多少的时候
[root@localhost ~]# cat abc 
3
2
2
5
4
6
3
5
4
4
2
2
[root@localhost ~]# sort -u abc #这种方式最简单
2
3
4
5
6


按照第三列将文件进行排序,数字,按照从大到小顺序,并且其他字段可以在同一行保留,很有用
[root@master ~]#cat abc 
258189 1191 .46100
258189 4210 1.63000
258189 394 .15200
258189 1436 .55600
258189 0 0
258189 2418 .93600
258189 0 0
258189 1084 .41900
258189 56492 21.88000
258189 3639 1.40900
258189 206 .07900
258189 0 0
258189 1412 .54600
258189 0 0
258189 4 .00100

[root@master ~]#cat abc | sort -nr -k 3
258189 56492 21.88000
258189 4210 1.63000
258189 3639 1.40900
258189 2418 .93600
258189 1436 .55600
258189 1412 .54600
258189 1191 .46100
258189 1084 .41900
258189 394 .15200
258189 206 .07900
258189 4 .00100
258189 0 0
258189 0 0
258189 0 0
258189 0 0

5、uniq:报告或者移除重复的行,连续且完全相同表示为重复

1、格式:uniq [OPTION]… [INPUT [OUTPUT]]

2、选项

-c:count,显示每行重复的次数
-u:unique,仅显示未曾重复过的行,也就是说显示只出现一次的行,不相邻但是重复的行也显示

3、示例

[root@localhost ~]#cut -d: -f7 abc 
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin

[root@localhost ~]#cut -d: -f7 abc | uniq -u    #仅显示未重复的行,相邻的且重复的行才处理,不相邻但是重复的也会显示
/bin/bash
/bin/sync
/sbin/shutdown
/sbin/halt
/bin/bash
/bin/sync
/sbin/shutdown
/sbin/halt

[root@localhost ~]#cut -d: -f7 abc | uniq -c    
#这样即使相同的也不会统计为一次,而是相同且相邻的才会统计,为了相同的都统计,要先排序,将相同的都放在相邻的,再统计
      1 /bin/bash
      4 /sbin/nologin
      1 /bin/sync
      1 /sbin/shutdown
      1 /sbin/halt
      2 /sbin/nologin
      1 /bin/bash
      4 /sbin/nologin
      1 /bin/sync
      1 /sbin/shutdown
      1 /sbin/halt
      2 /sbin/nologin
      
      
[root@localhost ~]#cut -d: -f7 abc | sort | uniq -c    #这样统计的才是相同的总数
      2 /bin/bash
      2 /bin/sync
      2 /sbin/halt
     12 /sbin/nologin
      2 /sbin/shutdown
 
[root@localhost ~]#cut -d: -f7 abc | sort | uniq -c | sort    #再次进行排序,这样才是最后的统计结果
     12 /sbin/nologin
      2 /bin/bash
      2 /bin/sync
      2 /sbin/halt
      2 /sbin/shutdown

6、tr命令

1、作用:转换字符,tr – translate or delete characters

-c,--complement:取代所有不属于第一字符集的字符
-d,--delete:删除所有属于第一字符集的字符
-s,--squeeze-repeats:把连续重复的字符以单独一个字符表示
-t,--truncate-set1:先删除第一字符集较第二字符集多出的字符
-d,--delete:delete characters in SET1, do not translate

2、示例

[root@localhost ~]#echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d 'b#$c'    #有引号中的字符就将其删除
aa.,a 1  2 */ 3 ddd 4

[root@localhost ~]#echo "thissss is a    text linnnnnnne." | tr -s ' n'    #将后面有的字符都替换为一个,注意引号里面有空格,空格也会被压缩
thissss is a text line.

[root@localhost ~]#echo "thissss is a    text linnnnnnne." | tr 'a-z'  'A-Z'    #将文件里面出现的大写字母全部转换为小写字母
THISSSS IS A    TEXT LINNNNNNNE.

7、练习

1、取出ip地址

[root@localhost ~]#ifconfig | head -2 | tail -1
          inet addr:192.168.175.11  Bcast:192.168.175.255  Mask:255.255.255.0
[root@localhost ~]#ifconfig | head -2 | tail -1 | tr -s " " 
 inet addr:192.168.175.11 Bcast:192.168.175.255 Mask:255.255.255.0
[root@localhost ~]#ifconfig | head -2 | tail -1 | tr -s " " | cut -d" " -f3
addr:192.168.175.11

2、查出分区空间使用率的最大百分比值

[root@localhost ~]#df -Th
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda2      ext4    48G  5.0G   41G  11% /
tmpfs          tmpfs  330M  224K  330M   1% /dev/shm
/dev/sda1      ext4   190M   34M  147M  19% /boot
/dev/sda3      ext4    29G   44M   28G   1% /test

[root@localhost ~]#df | tr -s " " | cut -d" " -f5
Use%
11%
1%
19%
1%

[root@localhost ~]#df | tr -s " " | cut -d" " -f5 | sort -n | tail -1 | tr -d "%"
19

3、查出用户UID最大值的用户名、UID及shell类型

cat /etc/passwd | sort -n -t : -k3 | cut -d : -f1,3,7 | tail -1

4、查出/tmp的权限,以数字方式显示

[root@localhost ~]#stat abc | head -4 | tail -1 | cut -d: -f2 | tr -cd '[:digit:]'
0644[root@localhost ~]#
[root@localhost ~]#stat abc | head -4 | tail -1 | cut -d: -f2 
 (0644/-rw-r--r--)  Uid

5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

[root@localhost ~]#netstat -nt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0     52 192.168.175.11:22           192.168.175.30:50854        ESTABLISHED 
tcp        0      0 192.168.175.11:59121        23.215.102.235:80           ESTABLISHED

[root@localhost ~]#ss -nt | tail -n +3 | tr -s " " | cut -d" " -f5 | sort  | uniq -c | sort -n -r
      1 23.215.102.235:80
      1 192.168.175.30:50854

未经允许不得转载:江哥架构师笔记 » linux文本处理:wc,cut,sort,uniq,tr命令

分享到:更多 ()

评论 抢沙发

评论前必须登录!