which、whereis、sort、uniq、cut、wc

4.文件或命令查找

4.1. which whereis 命令路径查找

which ls		#查找ls命令的绝对路径
whereis ls		#查找命令的绝对路径、帮助手册等
whereis -b ls	        #-b 仅显示命令的所在路径
type -a ls		#查看命令的绝对路径(包括别名)

4.2. sort 文件内容排序

参数

-r:倒叙
-n:按数字排序
-t:指定分割符(默认空格)
-k:指定第几列,指定第几列几字符(指定1,1 3.1,3.3)
练习文件
cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF

sort -t ":" -k2 file.txt  #-t指定分割符 -k指定列

sort -t ":" -k2 -n file.txt  #-t指定分割符 -k指定列 -n按阿拉伯数字排序

sort -t ":" -k2 -n -r file.txt  #-t指定分割符 -k指定列 -n按阿拉伯数字排序 -r倒叙最大的在上面

sort -t ":" -k2 -nr file.txt | head -n3  #提取前三
ps:| 管道:将左边命令的输出结果通过管道交给右边命令的输入

练习二:
cat ip.txt
192.168.3.1 00:0F:AF:81:19:1F
192.168.3.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.2.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.0.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.1.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.1.12 00:30:15:A2:3A:A1
192.168.1.1 00:0F:AF:81:19:1F
192.168.2.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.1.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.1.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.3.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.3.12 00:30:15:A2:3A:A1

sort -t "." -k3.1,3.1 -k4.1,4.3 -n ip.txt

4.3. uniq 去重并统计出现的次数

必须配合sort 一起使用,先排序,然后去重统计

参数

-c 计算重复的次数,必须挨着的相同行
练习文件
cat >>file3.txt <<EOF
abc
123
abc
123
EOF

sort file3.txt | uniq	#去重不统计
sort file3.txt | uniq -c	#-c去重统计出现的次数

4.4. cut 截取字段 配合简单了解使用sed swk

选项:
-d:指定分割符
-f:数字,取第几列 -f3,6三列和6列
-c:按字符取(空格也算)

1.产生文件
# echo "Im oldxu, is QQ 552408925" > oldboy.txt

2.需求:过滤出oldboy.txt文件里 oldxu以及552408925
3.如何实现:
实现方法1:
[root@oldboy ~]# cut -d " " -f 2,5 oldboy.txt
oldxu, 552408925
[root@oldboy ~]# cut -d " " -f 2,5 oldboy.txt  | sed 's#,##g'
oldxu 552408925

实现方法2:
[root@oldboy ~]# awk  '{print $2,$5}' oldboy.txt
oldxu, 552408925
[root@oldboy ~]# awk  '{print $2,$5}' oldboy.txt | sed 's#,##g'
oldxu 552408925

实现方法3: awk处理
[root@oldboy ~]# awk -F "," '{print $1,$2}' oldboy.txt  | awk '{print $2,$5}'
oldxu 552408925


[root@oldboy ~]# awk -F "[ ,]" '{print $2,$6}' oldboy.txt
oldxu 552408925

高级用法
[ ,]+   +表示重复	前面的字符一次或多次   
	空格算一个分隔符
	逗号算一个分隔符
	空格和逗号挨在一起,也算一个分隔符
	空格逗号空格,全算一个分隔符
[root@oldboy ~]# awk -F "[ ,]+" '{print $2,$5}' oldboy.txt
oldxu 552408925

4.5. wc 统计文件多少行

选项:
-l	显示文件行数
-c	显示文件字节
-w	显示文件单词

练习统计一个文件有多少行

方法一:
# wc -l /etc/services
11176 /etc/services

方法二:
# cat -n /etc/services |tail -1 |awk '{print $1}'

方法三:
# grep -n ".*" /etc/services |tail -1 |awk -F ":" '{print $1}'

方法四:仅供参考!!!!!!!不纠结
NR: 行号
$0: awk是逐行处理文件的,读入一行,然后将一行的内容赋值给$0变量,
# awk '{print NR,$0}' /etc/services  | tail -1 | awk '{print $1}'
11176

练习题: 过滤出/etc/passwd以nologin结尾的内容,并统计有多少行

	过滤: grep   /etc/passwd
	条件: nologin结尾的
	并且:
	统计出现的内容总共有多少行: wc -l

[root@oldboy ~]# grep "nologin$" /etc/passwd | wc -l
19

练习题:

分析如下日志,统计每个域名被访问的次数。
[root@student tmp]# cat >>web.log<<EOF 
http://www.xuliangwei.com/index.html
http://www.xuliangwei.com/1.html
http://post.xuliangwei.com/index.html
http://mp3.xuliangwei.com/index.html
http://www.xuliangwei.com/3.html
http://post.xuliangwei.com/2.html
EOF

思路:
	1.要想办法提取域名
	2.排序,将相同的域名罗列在一起
	3.去重,统计

实现:
[root@oldboy ~]# awk -F '/' '{print $3}' web.log | sort | uniq -c
      1 mp3.xuliangwei.com
      2 post.xuliangwei.com
      3 www.xuliangwei.com

将访问次数最多的排在上面
[root@oldboy ~]# awk -F '/' '{print $3}' web.log | sort | uniq -c  | sort -nr
      3 www.xuliangwei.com
      2 post.xuliangwei.com
      1 mp3.xuliangwei.com


----------------------------下午-------------------------------
习题1: 使用awk取出系统的IP地址,思路如下:
	1.我要取的IP值在哪里	 ifconfig
	2.如何缩小取值范围(行)
	3.如何精确具体内容(列)

方式1:
[root@oldboy ~]# ifconfig eth0 | head -2 | tail -1 | awk '{print $2}'
172.16.1.53

方式2:
[root@oldboy ~]# ifconfig eth0 | grep "netmask" | awk '{print $2}'
172.16.1.53


习题2: 将/etc/passwd文件中的第一行中的第一列和最后一列位置进行交换。(自行指定以:为分隔符)
	源文件:root:x:0:0:root:/root:/bin/bash
	改变后:/bin/bash:x:0:0:root:/root:root


习题3: 将/etc/sysconfig/selinux 文件中的SELINUX=enforcing替换成SELINUX=disabled
posted @ 2021-04-30 00:04  小迷茫c  阅读(96)  评论(0)    收藏  举报