Linux文件管理基础命令(下)-day08
2020-03-08 本文已影响0人
Linux运维
查找、排序、去重、截取字段、统计
一、查找
which 查看绝对路径
[root@10 ~]# which cd
/usr/bin/cd
whereis
选项:-b 二进制文件,只查看绝对路径
[root@10 ~]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
[root@10 ~]# whereis -b cd # -b 二进制文件,不查看帮助,只查看绝对路径
cd: /usr/bin/cd
type
[root@10 ~]# type -a ls #查看命令的绝对路径(包括别名)
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
二、排序
sort
选项:-t 指定分隔符,-k 指定第几列,-n 按数字排列,-r 倒序
[root@10 ~]# cat file.txt
b:3
c:2
a:4
e:5
d:1
f:11
[root@10 ~]# sort -t ":" -k2 -n file.txt # -t ":" 代表以冒号为分隔符,-k2 代表第二列
d:1
c:2
b:3
a:4
e:5
f:11
[root@10 ~]# sort -t ":" -k2 -nr file.txt # -r 是倒序
f:11
e:5
a:4
b:3
c:2
d:1
举例:-k3.1,3.3 指的是第三列的第一个字符,到第三列的第三个字符
三、去重
uniq (必须相邻,才能去重)
选项:-c 统计重复的次数
[root@10 ~]# sort file1.txt | uniq -c
管道 | :将左边命令的输出结果,交给管道右边命令的输入
去重步骤:
①先排序
②再去重
③最后统计
四、截取字段
cut
选项:-d 指定分隔符,-f 取第几列(-f 2,5 代表取第2列和第5列),-c 按字符取(空格也算)
[root@10 ~]#echo "Im zero, is QQ 214596302" > oldboy.txt
[root@10 ~]# cat oldboy.txt #查看文件内容
Im zero, is QQ 214596302
[root@10 ~]# cut -d " " -f 2,5 oldboy.txt # -d " " 指定空格为分隔符,-f 2,5 取出第2列和第5列
zero, 214596302
[root@10 ~]# cut -d " " -f 2,5 oldboy.txt | sed 's#,# #g' #想要去掉逗号,这里用到了管道以及sed命令
zero 214596302
sed
[root@10 ~]# cut -d " " -f 2,5 oldboy.txt | sed 's#,# #g' # 's#,# #g' 指的是空格代替逗号
zero 214596302
awk(重要)
选项:-F 指定分隔符
第一种方式:
[root@10 ~]# awk -F " " '{print $2,$5}' oldboy.txt
zero, 214596302
[root@10 ~]# awk -F " " '{print $2,$5}' oldboy.txt | sed 's#,# #g' # '{print $2,$5}' 指的是取出第2列和第3列
zero 214596302
第二种方式:
[root@10 ~]# awk -F "," '{print $1,$2}' oldboy.txt
Im zero is QQ 214596302
[root@10 ~]# awk -F "," '{print $1,$2}' oldboy.txt | awk '{print $2,$5}' #用了两次awk命令
zero 214596302
第三种方式:
[root@10 ~]# awk -F "[ ,]" '{print $2,$6}' oldboy.txt # [ ,] 指的是空格和逗号都算分隔符
zero 214596302
高级用法
[ ,]+ +表示重复,前面的字符一次或多次
空格算一个分隔符
逗号算一个分隔符
空格和逗号挨在一起,也算一个分隔符
空格逗号空格,全算一个分隔符
[root@10 ~]# awk -F "[ ,]+" '{print $2,$5}' oldboy.txt
zero 214596302
五、统计行号
wc
选项:-l 表示文件行数,-c 显示文件字节 ,-w 显示文件单词
[root@10 ~]# wc -l /etc/passwd
21 /etc/passwd #有21行
六、习题思路
1.习题: 分析如下日志,统计每个域名被访问的次数。
思路如下:
①想办法提取域名
②排序,将相同的罗列在一起
③去重,统计
2.习题1: 使用awk取出系统的IP地址。
思路如下:
①我要取得IP值在哪里 ifconfig
②如何精确到在哪一行
③如何精确到在哪一列