Shell中cut字符截取、sort文本排序、uniq文本去重
cut
- 描述
cut命令多用于字符截取
- 用法
cat [选项] [文件]
- 选项
-d 指定分隔符
-f 1,7|1-7 指定截取的列
-c 1,4|1-4 指定截取的字符位置
- 实例
以冒号(:)为分隔符,截取指定文件的第一列
[root@test ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
... ...
以冒号(:)为分隔符,截取指定文件的第一列和第三列
[root@test ~]# cut -d: -f1,3 /etc/passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
... ...
以冒号(:)为分隔符,截取指定文件的第一列、第二列和第三列
[root@test ~]# cut -d: -f1,2,3 /etc/passwd
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
sync:x:5
shutdown:x:6
... ...
sort
- 描述
用于将文本的行排序,默认情况下(不加参数)sort命令是按照字符串的字母顺序排序
- 用法
Usage: sort [OPTION]... [FILE]...
or: sort [OPTION]... --files0-from=F
- 参数
参数 | 用法 |
---|---|
-n | 纯数字排序 |
-r | 倒序 |
-u | 全局去重 |
-o | 输出到指定文件中 |
-t | 指定分隔符 |
-k | 指定要排序的列 |
默认情况下,sort命令将文件内容按字母顺序排序
[root@test ~]# sort /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
... ...
将文件内容按字母顺序 倒序 排序
[root@test ~]# sort -r /etc/passwd
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
unbound:x:995:993:Unbound DNS resolver:/etc/unbound:/sbin/nologin
tom:x:1001:1001::/home/tom:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
student:x:1000:1000:Student User:/home/student:/bin/bash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
saslauth:x:994:76:"Saslauthd user":/run/saslauthd:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
... ...
将sort排序后输出到指定文件
[root@test ~]# sort /etc/passwd -o test
[root@test ~]# cat test
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
... ...
以冒号(:)为分隔符,指定第三列且按照纯数字进行排序
[root@test ~]# sort -t: -k3n /etc/passwd
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
... ...
去掉重复数字排序
[root@test ~]# cat test
123
321
123
qwer
[root@test ~]# sort -u test
123
321
qwer
uniq
- 描述
用于移除或发现文件中的重复的条目,即对重复字符做相应的处理
- 用法
uniq [OPTION]... [INPUT [OUTPUT]]
- 选项
-u 显示唯一的行
-d 显示重复的行
-c 每行显示一次并统计重复次数
- 实例
编辑原文件
[root@test ~]# cat test
aaa
aaa
bbb
bbb
bbb
ccc
使用 uniq 命令,不加选项时,它只输出没有重复的行
[root@test ~]# uniq test
aaa
bbb
ccc
统计重复行出现的次数
[root@test ~]# uniq -c test
2 aaa
3 bbb
1 ccc
只显示文件中 有重复 的行并只显示一次
[root@test ~]# uniq -d test
aaa
bbb
只显示文件中 有重复 的行但显示重复的全部
[root@test ~]# uniq -D test
aaa
aaa
bbb
bbb
bbb
只显示文件中 不重复 的行
[root@test ~]# uniq -u test
ccc
使用 -w 选项,可以限制 uniq 命令只比较每行的前 N 个字符。
修改原文件如下
[root@test ~]# cat test
aaa bbb
aaa ccc
bbb aaa
bbb ccc
ccc ccc
限制 uniq 命令只比较每行的前3个字符是否重复
[root@test ~]# uniq -w 3 test
aaa bbb
bbb aaa
ccc ccc
使用-s选项,可以避免 uniq 命令比较每行的前 N 个字符,即跳过每行的前N个字符,只比较后面的字符。
避免 uniq 命令比较每行的前3个字符,只比较后面的字符是否重复
[root@test ~]# uniq -s 3 test
aaa bbb
aaa ccc
bbb aaa
bbb ccc
使用-f选项,可以避免 uniq 命令比较前 N 列,即跳过前N列(这里列以空格分隔),只比较后面的字符
避免 uniq 命令比较第一列的内容,只比较后面的字符是否重复
[root@test ~]# uniq -f 1 test
aaa bbb
aaa ccc
bbb aaa
bbb ccc
注意:uniq命令只能去重相邻行!!!
[root@test ~]# cat test
aaa
aaa
bbb
bbb
bbb
ccc
[root@test ~]# cat test01
aaa
aaa
bbb
bbb
bbb
ccc
aaa
[root@test ~]# uniq test
aaa
bbb
ccc
[root@test ~]# uniq test01
aaa
bbb
ccc
aaa