来自 服务器&运维 2020-03-13 20:56 的文章
当前位置: 澳门威尼斯人平台 > 服务器&运维 > 正文

linux sort,uniq,cut,wc命令详解

本文主要对Linux中sort,uniq,cut,wc这4个命令的使用方法进行了详细说明,希望对你有所帮助。

sort

sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。

sort语法

澳门威尼斯人平台 1

[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;-b  :忽略最前面的空格符部分;-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);-r  :反向排序;-u  :就是 uniq ,相同的数据中,仅出现一行代表;-t  :分隔符,默认是用 [tab] 键来分隔;-k  :以那个区间 (field) 来进行排序的意思

澳门威尼斯人平台 2

对/etc/passwd 的账号进行排序

[root@www ~]# cat /etc/passwd | sortadm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

 

/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何

[root@www ~]# cat /etc/passwd | sort -t ':' -k 3root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

默认是以字符串来排序的,如果想要使用数字排序:

cat /etc/passwd | sort -t ':' -k 3nroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/sh

默认是升序排序,如果要倒序排序,如下

cat /etc/passwd | sort -t ':' -k 3nr
nobody:x:65534:65534:nobody:/nonexistent:/bin/shntp:x:106:113::/home/ntp:/bin/falsemessagebus:x:105:109::/var/run/dbus:/bin/falsesshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

 

如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。

cat /etc/passwd |  sort -t':' -k 6.2,6.4 -k 1r      
sync:x:4:65534:sync:/bin:/bin/syncproxy:x:13:13:proxy:/bin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/sh

 

查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:

cat /etc/passwd |  sort -t':' -k 7 -u
root:x:0:0:root:/root:/bin/bash
syslog:x:101:102::/home/syslog:/bin/falsedaemon:x:1:1:daemon:/usr/sbin:/bin/shsync:x:4:65534:sync:/bin:/bin/syncsshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

 

Linux文本处理命令(wc,cut,sort,uniq,diff,patch)详解

我相信大家在使用Linux过程中总会遇到想要提取某些自己需要的信息的情况,比如如下这四种情况:
1、找出ifconfig命令结果中eno16777728的IPv4地址
2、查出分区空间使用率的最大百分比值
3、查出/tmp的权限,以数字方式显示
这个时候,我们使用命令当然也可以查看,不过还需要自己通过眼睛去过滤不需要的信息,多费劲。如何让自己更轻松的看到自己想看到自己想看的信息呢?今天的文本处理命令能满足我们的简单需求。

wc 此wc非彼WC,在这里wc是word count的简写

wc - print newline, word, and byte counts for each file
其表达格式:wc [OPTION]... [FILE]...
常用选项:
      -l:lines 只显示行数
      -w:words  只显示单词总数
      -c:bytes  只显示该内容字节总数

下面以实例来具体显示wc的功用
创建/test目录 创建/test/wc.txt文件
[[email protected] test]# cat > 1
hello me
hello my boy

使用cat在wc.txt内输入一些字符

[[email protected] test]# wc wc.txt 
 2  5 22 wc.txt  第一个2代表行数 第二个5代表单词数 第三个22代表该内容字节总数 
[[email protected] test]# wc -l wc.txt 
2 wc.txt
[[email protected] test]# wc -c wc.txt 
22 wc.txt
[[email protected] test]# wc -w wc.txt 
5 wc.txt

cut 
cut - remove sections from each line of files
表达格式:cut OPTION... [FILE]...
常用选项:
      -d<char> : 以指定的字符为分隔符
      -f #(单个字段)|#-#(连续多个字段)|#,...,#(离散多个字段)
      -c 按字符切割
      --output-delimiter=STRING指定输出分隔符
以/etc/passwd文件为对象做实验
1、取用户名及用户UID并指定输出的分隔符为#

[[email protected] test]# tail -5 /etc/passwd
laowang:x:4322:4322::/home/laowang:/bin/bash
u1:x:4323:4323:UUU:/home/u1:/bin/csh
u2:x:4324:4324::/home/u2:/bin/bash
u3:x:4325:4325::/home/u3:/bin/bash
u4:x:4326:4326::/home/u4:/sbin/nologin

通过上面内容,我们可以确定我们需要的内容在第一节跟第三节,同事分隔符为“:”
[[email protected] test]# cut -d: -f 1,3 /etc/passwd --output-delimiter=#
root#0
bin#1
daemon#2
adm#3
..

2、查看/etc/passwd文件最后一行,且从第5个字符开始截取到第十个字符.
[[email protected] test]# tail -1 /etc/passwd | cut -c 5-10
:4326:

sort 排序

sort - sort lines of text files
表达格式: sort [OPTION]... [FILE]...
常用选项:
      -t CHAR:指定分隔符
      -k #:用于排序比较的字段
      -n:基于数值大小排序
      -r:逆序排列
      -f:忽略字符大小写
      -u:重复内容只保留一行
还是以/etc/passwd为对象测试
显示UID最大的用户及其默认shell
[[email protected] test]# sort -t: -k 3 -n /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
...
basher:x:4329:4329::/home/basher:/bin/bash
nologin:x:4330:4330::/home/nologin:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

显示成功,但是结果并不直观,我们在利用上面的cut命令对结果进行进一步加工

[[email protected] test]# sort -t: -k 3 -n /etc/passwd | tail -1 | cut -d: -f 1,7
nfsnobody:/sbin/nologin

uniq 报告或移除重复的行
uniq - report or omit repeated lines
表达格式:uniq [OPTION]... [INPUT [OUTPUT]]
常用选项:
      -c:显示每行的重复次数
      -u:仅显示未曾重复过的行
      -d:仅显示重复过的行
为了演示uniq命令方便,我们创建一个有重复行的文件/test/uniq.txt
[[email protected]ost test]# cat uniq.txt 
qqqq
qqqq
qqqq
dfsdf
aa
bb
bb
cc
q
[[email protected] test]# uniq uniq.txt 
qqqq
dfsdf
aa
bb
cc
q

uniq 加文件默认将重复的内容隐藏。
[[email protected] test]# uniq -c uniq.txt 
      3 qqqq
      1 dfsdf
      1 aa
      2 bb
      1 cc
      1 q
      1 q
[[email protected] test]# uniq -u uniq.txt 
dfsdf
aa
cc
q
[[email protected] test]# uniq -d uniq.txt 
qqqq
bb


diff  逐行比较文件的异同

diff - compare files line by line
diff [OPTION]... FILES
常用选项:

      -u:使用unified机制,即显示要修改的行的上下文,默认3行
[[email protected] test]# cat diff1 diff2
abcd
abcde
abcd
bcd
abcde
bc
[[email protected] test]# diff diff1 diff2   
1c1

sort

sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。

sort语法

[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-M  :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思

对/etc/passwd 的账号进行排序

[root@www ~]# cat /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何

[root@www ~]# cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

默认是以字符串来排序的,如果想要使用数字排序:

cat /etc/passwd | sort -t ':' -k 3n
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh

默认是升序排序,如果要倒序排序,如下

cat /etc/passwd | sort -t ':' -k 3nr
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ntp:x:106:113::/home/ntp:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。

cat /etc/passwd |  sort -t':' -k 6.2,6.4 -k 1r      
sync:x:4:65534:sync:/bin:/bin/sync
proxy:x:13:13:proxy:/bin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:

cat /etc/passwd |  sort -t':' -k 7 -u
root:x:0:0:root:/root:/bin/bash
syslog:x:101:102::/home/syslog:/bin/false
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

uniq

 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

uniq语法

[root@www ~]# uniq [-icu]
选项与参数:-i   :忽略大小写字符的不同;-c  :进行计数-u  :只显示唯一的行

 

testfile的内容如下

澳门威尼斯人平台 3

cat testfile
hello
world
friend
hello
world
hello

澳门威尼斯人平台 4

澳门威尼斯人平台, 

直接删除未经排序的文件,将会发现没有任何行被删除

澳门威尼斯人平台 5

#uniq testfile  
hello
world
friend
hello
world
hello

澳门威尼斯人平台 6

 

排序文件,默认是去重

#cat words | sort |uniqfriend
hello
world

 

排序之后删除了重复行,同时在行首位置输出该行重复的次数

#sort testfile | uniq -c1 friend3 hello2 world

 

仅显示存在重复的行,并在行首显示该行重复的次数

#sort testfile | uniq -dc3 hello2 world

 

仅显示不重复的行

sort testfile | uniq -u
friend

 

< abcd

> bcd
3c3

本文由澳门威尼斯人平台发布于服务器&运维,转载请注明出处:linux sort,uniq,cut,wc命令详解

关键词: