Linux命令之sort uniq wc tr

Linux命令之sort uniq wc tr

sort 命令

Linux sort命令用于将文本文件内容加以排序。
sort可针对文本文件的内容,以行为单位来排序。

语法:

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列,并将结果输出到标准输出。

参数说明:

-n 依照数值的大小排序

sort -n file.txt 	#对文件第一个字符进行排序,默认从小到大

-r 以相反的顺序来排序

sort -n -r file.txt 	#对排序结果进行反转,从大到小排序

-u 意味着是唯一的(unique),输出的结果是去完重了的

sort -u file.txt 	#对排序结果去重

-t <分隔字符> 指定排序时所用的栏位分隔字符
-k 根据-t分隔区域后,选定区域用于排序

sort -n -t "." -k 4 ip.txt 	#指定分隔符号,指定区域进行排序,从小到大

比如有存储的IP地址列表需要排序:

10.0.0.1
10.0.0.22
10.0.0.4
10.0.0.35
10.0.0.211

这个地方需要加上-n 参数 指定数值大小排序,不然会根据-k 4区域的第一个char(字符)进行排序

uniq 命令

Linux uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用

uniq 可检查文本文件中重复出现的行列

语法:

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

参数:

-c,--count 		在每列旁边显示该行重复出现的次数。
-d,--repeated 	仅显示重复出现的行列。   
-u,--unique 	仅显示出一次的行。unique的只出现过一次,时针对-c统计之后的结果

实例:

文件testfile中第 2、3、5、6、7、9行为相同的行,使用 uniq 命令删除重复的行:

uniq testfile 	#仅能去重连续的重复行

结合sort使用,可以去重不连续的重复行

sort -n testfile |uniq 	#排序后去重,可以实现精准去重

在精准去重的基础上,统计重复行出现的次数,在行首计数

sort -n testfile |uniq -c 	#统计每一行的重复次数

只显示文件中的重复行,并计数

sort -n testfile |uniq -c -d 	#筛选去除行计数为1的行

只显示文件中的未重复行,也就是说行首计数为1的行

sort -n testfile |uniq -c -u 	#只显示行首计数为1的行

wc 命令

Linux wc命令用于计算字数

利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

语法:

wc [-clw][--help][--version][文件...]

参数:

-c,--bytes		只显示Bytes数
-m,--chars		打印字符数 
-l,--lines		打印行数
-L,--max-line-length  打印最长行的长度
-w,--words		打印单词数

实例:

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数:

wc testfile 

使用 wc统计,结果如下:

$ wc testfile           # testfile文件的统计信息  
3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 

其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。

wc -l #统计文件的行数
wc -w #统计单词的数量

[root@wwk code]# echo "wwk is rich and cool" |wc -w
5

wc -m #统计字符数量

[root@wwk code]# echo "wang" |wc -m
5

这里的wang字符是4个,为什么会被统计成5个呢,因为字符串结尾有个$符(行结束符)

[root@wwk code]# echo "wang" |cat -E
wang$

wc -L #输出最长行的字符数

cat XXX.txt |wc -L

tr 命令

Linux tr 命令用于转换或删除文件中的字符。

tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

语法:

tr [-cdst][--help][--version][第一字符集][第二字符集]  
tr [OPTION]…SET1[SET2] 

参数说明:

-c, --complement:		反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换(取代所有属于第一字符集的字符)
-d, --delete:			删除指令字符(删除所有属于第一字符集的字符)
-s, --squeeze-repeats:	缩减连续重复的字符成指定的单个字符(把连续重复的字符以单独一个字符表示)
-t, --truncate-set1:	削减 SET1 指定范围,使之与 SET2 设定长度相等(先删除第一字符集较第二字符集多出来的字符)

字符集合的范围:

\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
\\ 反斜杠
\a Ctrl-G 铃声
\b Ctrl-H 退格符
\f Ctrl-L 走行换页
\n Ctrl-J 新行
\r Ctrl-M 回车
\t Ctrl-I tab键
\v Ctrl-X 水平制表符
CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
[CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
[CHAR*REPEAT] :这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有水平与垂直空格符
[:upper:] :所有大写字母
[:xdigit:] :所有 16 进位制的数字
[=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)

实例:

将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令:

cat testfile |tr a-z A-Z 

大小写转换,也可以通过[:lower][:upper]参数来实现。例如使用如下命令:

cat testfile |tr [:lower:] [:upper:] 

使用-d删除参数

[root@wwk ~]# echo "my name is wwk, i have 12345 gold" |tr -d 'a-z'
   ,   12345 
[root@wwk ~]# echo "my name is wwk, i have 12345 gold" |tr -d 'a,i'
my nme s wwk  hve 12345 gold
[root@wwk ~]# echo "my name is wwk, i have 12345 gold" |tr -d '1-9'
my name is wwk, i have  gold

把文件作为标准输入,进行字符替换

[root@wwk ~]# cat text.txt 
my name is wwk
i like money very much
[root@wwk ~]# tr 'w' 'W' < text.txt 
my name is WWk
i like money very much

使用-s参数去除连续的重复字符

[root@wwk ~]# echo "iiiiii aaaammmm ccccoooo" |tr -s 'iamco'
i am co

猜你喜欢

转载自blog.csdn.net/lyhbwwk/article/details/111872887