linux awk 命令练习题 三剑客

今天白眉的这篇文章主要是对awk  做练习,我们之前在  linux awk命令详解 (linux 三剑客之awk)

这篇文章中介绍 linux  awk 的用法。  不多说了, 我们来练习吧!

准备内容:

cat -n /etc/passwd| head > ~/baimei.txt

(1)取出文件中的第5行

awk 'NR==5' baimei.txt

(2) 取出文件中大于7的所有行

awk 'NR>7' baimei.txt

(3)取出小于5的行

awk 'NR<5' baimei.txt

(4)取出大于3并且小于7的行

awk 'NR>3&& NR<7' baimei.txt

(5) 取出文件中包含root的行

awk '/root/' baimei.txt

(6) 取出文件中匹配root-adm之间的行

awk '/root/,/adm/' baimei.txt

(7) 取出文件中所有的用户名

awk -F':' '{print$1}' baimei.txt

(8) 取出文件中所有的解释器

awk -F':' '{print $NF}' baimei.txt

(9) 同时输出用户名的列和解释器的列以空格分隔

awk -F':' '{print $1, $NF}' baimei.txt

awk -F: '{print $1"---"$NF}' baimei.txt

(10) 只取出文件中的adm用户输出到屏幕上

awk -F: '$1=="adm" {print $1}' baimei.txt

(11)只取出文件中的root用户和adm用户输出到屏幕上

awk -F: '$1=="adm" || $1=="root" {print $1}' baimei.txt

(12)只取出root用户,并且在root用户前面加上 管理员字符

示例: 管理员: root

awk -F: '$1=="root" {print "管理员:" $1}' baimei.txt

(13)取出第三列等于0的行

awk -F: '$3==0 {print }' baimei.txt

(14)取出第三列大于5的行

awk -F: '$3>5 {print }' baimei.txt

(15)取出第三列大于0并且小于999的行

awk -F: '$3>0&&$3<999 ' baimei.txt

(16).取出第三列大于1000的行(先使用useradd baimei在统计大于1000的行)

cat /etc/passwd | awk -F: '$3>1000'

(17)统计管理员的个数

cat /etc/passwd | awk -F: '$NF=="/bin/bash"' |wc -l

(18) 统计虚拟用户的个数

cat /etc/passwd | awk -F: '$NF=="/sbin/nologin"' |wc -l

(19) 统计普通用户的个数

cat /etc/passwd | awk -F: '$3>1000' |wc -l

(20 )输出文件的行号

NF 中存储着每一行最后一列的列号,NR 中存储 行号

awk '{print NF,$1}' baimei.txt

 复制以下内容到test.txt

lzy:--baimeidashu:-is a:/good boy!

(21)指定:-/为任意单个字符取出good字符

awk -F'[-: /]' '{print $(NF-1)}' test.txt

(22)指定:-/为连续的字符串取出good字符

awk -F':/' '{print$2 }' test.txt | awk -F' ' '{print $1}'

下载 下边 百度云 文件中的access.log上传到家目录

链接:https://pan.baidu.com/s/1qIra0LLyiK6VxkoqlFHZJw?pwd=saba
提取码:saba

然后解压:

unzip 02-【awk练习文件】access-服务的访问日志-v3.zip

出现 access.log 文件

aw

(22)取出access.log文件中所有的IP地址(第一列为IP),并取Top10

awk -F' - - ' '{print $1}' access.log

(23)取出access.log中上午8点-下午4点之间的总行数

awk -F'+0800' '{print $1}' access.log | awk -F: '$2>8&& $2<16 {print $2}' |wc -l

(24)取出access.log中上午8点-下午4点之间的IP的Top10、

awk -F'+0800' '{print $1}' access.log | awk -F: '$2>8&& $2<16 {print $1}' | awk -F'- - ' '{print$1}' |sort |uniq -c|sort -rn|head

 

(25).使用df -h命令,过滤出包含sda3的行(最少三种方法)

df -h | awk '/sda3/'

df -h| grep 'sda3'

df -h |sed -n '/sda3/p'

(26).统计下面文件中每个域名出现的次数

(注: 先取出域名在排序 域名类似: www.baidu.com取出后去重统计)

cat url.txt


http://www.baidu.com/index.html
http://www.sina.cn/1.html
http://www.weibo.com/index.html
http://www.baiduaaa.com/index.html
http://www.baidu.com/index.html
http://www.sina.cn/2.html
http://www.sina.com/index.html
http://www.baidu.cn/3.html

 

awk -F'://' '{print $2}' url.txt | awk -F'/' '{print$1}' |uniq -c|sort -rn

 

扩展题:(比较烧脑适可而止!)

使用awk的if判断统计虚拟用户数量
使用awk统计access.log的总行数
使用awk数组统计出passwd中最后一列解释器出现的次数

使用sed将文件内容逆序排序显示到屏幕
示例:
正常情况是:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

逆序后是:
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章