SHELL学习文本处理(二):sort,uniq与test命令

一、sort命令:排序

参数:
-n    纯数字排序
-r    倒序
-u    去掉重复数字
-o    输出到指定文件中
-t    指定分隔符
-k    指定要排序的列
[root@server ~]# sort westos   (默认以第一个数字排序)
1
12
123
2
3
32
5
51
6
7 

[root@server ~]# sort -n westos 
1
2
3
5
6
7
12
32
51
123
[root@server ~]# sort -u westos 
1
12
123
2
3
32
5
51
6
7

[root@server ~]# sort -t : -k 2 westos   (此时没有n参数,默认以第二列数字的第一个数字大小排序)
2:0
12:10
2:12
3:2
51:20
5:21
123:22
32:31
5:4
6:4
1:5
51:55
123:66
7:79
[root@server ~]# sort -nt : -k 2 westos 
2:0
3:2
5:4
6:4
1:5
12:10
2:12
51:20
5:21
123:22
32:31
51:55
123:66
7:79

[root@server ~]# sort -nt : -k 2 westos -o /mnt/file   ##指定以:为分隔符按第二列纯数字排序,输出到/mnt/file

二、uniq命令:对重复字符处理

参数
-u   显示唯一的行
-d   显示重复的行
-c   每行显示一次并统计重复次数
[root@server ~]# sort -n westos | uniq -c
      1 0
      1 1
      2 2
      1 4
      1 6
      1 9
      2 10
      1 20
      1 22
      2 31
      1 55

[root@server ~]# sort -n westos | uniq -d
2
10
31 

[root@server ~]# sort -n westos | uniq -u
0
1
4
6
9
20
22
55 

三、练习

将/tmp目录中的文件取出最大的

[root@server mnt]# ll /tmp
total 4
drwx------. 2 root root  23 Dec 22 06:42 ssh-o63BsvHdpEJR
drwx------. 3 root root  16 Dec 22 06:40 systemd-private-Bsnm8D
drwx------. 3 root root  16 Dec  9 07:54 systemd-private-knpjXn
drwx------. 3 root root  16 Dec  9 07:52 systemd-private-LpoUQZ
drwx------. 3 root root  16 Dec 22 06:42 systemd-private-OmwKO5
drwx------. 3 root root  16 Dec 22 06:40 systemd-private-OWrNwD
drwx------. 3 root root  16 Dec  9 07:52 systemd-private-xoctWX
-rw-------. 1 root root 563 Dec 22 06:42 yum_save_tx.2018-12-22.06-42.wwVZCI.yumtx

第一种:
[root@server mnt]# ll /tmp | sort -nk 5 | cut -d " " -f 9 | tail -n 1
yum_save_tx.2018-12-22.06-42.wwVZCI.yumtx

第二种:
[root@server mnt]# ls -Sl /tmp/ | head -2 | cut -d " " -f 9

yum_save_tx.2018-12-22.06-42.wwVZCI.yumtx 

四,test命令

test "$a" == "$b" 等同于 [ "$a" == "$b" ]

[ "$a" =="$b" ]	        等于
[ "$a" != "$b" ]	    不等于
[ "$a" -eq "$b" ]	    等于
[ "$a" -ne "$b" ]	    不等于
[ "$a" -le "$b" ]	    小于等于
[ "$a" -ge "$b" ]	    大于等于
[ "$a" -gt "$b" ]	    大于
[ "$a" -lt "$b" ]	    小于
[ "$a" -ne "$b" -a "$a" -gt "$b" ]	      -a:(and)必须条件都满足
[ "$a" -ne "$b" -o"$a" -gt "$b" ]	      -o:(or)条件至少满足一个
[ -z "$a" ]	            是否为空
[ -e "file" ]	        是否存在
[ -f "file" ]	        普通文件
[ -b "file" ]       	块设备
[ -S "file" ]	        套接字
[ -c "file" ]	        字符设备
[ -L "file" ]	        软链接

练习1:判断输入的数字是否在10以内

  • 输入是否为空
  • 是否在10以内
  • 0<$a<10 --> yes
  • $a<1 $a>10 --> no
 [root@server test]# cat data.sh 
 #!/bin/bash
 [ -z "$1" ] && {
 	echo "please input a number!"    ##如果未输入数,就提示
 	exit 1							###非正常退出
 }
 [ "$1" -gt "0" -a "$1" -lt "10" ] && {      ##判断如果输入的数在0-10的范围内就输出YES
 	echo "YES"
 } || {
 	echo "NO"      ##否则输出NO
 }
 [root@server test]# sh data.sh 
 please input a number!
 [root@server test]# sh data.sh 1
 YES
 [root@server test]# sh data.sh 54
 NO

练习2:判断文件类型

 [root@server test]# cat file.sh 
 #!/bin/bash
 read -p "请输入文件或设备名:" a
 [ -e "$a" ]&&{           ###判断该文件是否为空
 	echo "this file exit!"    
 }||{
 	echo "This file doesn't exit !"
 	exit 1
 }
 [ -f "$a" ]&&{           ###判断文件是否为普通问价
 	echo "this file is a normal file"
 }
 [ -b "$a" ]&&{           ###判断文件是否是块文件
         echo "this file is a block file"
 }
 [ -S "$a" ]&&{           ###判断文件是否是套接字
         echo "this file is a socket"
 }
 [ -c "$a" ]&&{           ###判断文件是否是字符设备
         echo "this file is a character device"
 }
 [ -L "$a" ]&&{           ###判断文件是否是软连接
         echo "this file is a soft link"
 }
 [root@server test]# sh file.sh 
 请输入文件或设备名:
 This file doesn't exit !
 [root@server test]# sh file.sh 
 请输入文件或设备名:/dev/pts/0
 this file exit!
 this file is a character device

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值