awk练习题

awk题目

1,通过awk判断系统的用户都属于什么用户:

[[email protected] ~]# awk -F ‘:‘ ‘{if($3 == 0 )print "超级管理员: "$1}{if($3 > 0 && $3 < 1000)print "系统用户: "$1}{if($3 >= 1000)print "自建用户:"$1}‘ /etc/passwd

2,显示出包含Lee和包含kevin的行的中间行

[[email protected]_50 tmp]# cat test.txt
Allen Phillips
Green Lee
William Aiden James Lee
Angel Jack
Tyler Kevin
Lucas Thomas
Kevin

解答

awk ‘/Lee/,/kevin/{print $0}‘ test.txt

3,利用awk把lsof的文件大小人性化输出

4,如何过滤出来出来正常的IP地址

(\b([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])

5,awk取指定范围的列:

awk -F : ‘{for(i=3;i&lt;=5;i++)printf"%s ",$i;printf"\n"}‘ /etc/passwd

6,如何把/etc/passwd文件里面的‘:‘ 全部替换成空格

awk ‘{gsub(/:/," ",$0);print $0}‘ passwd
sed -n "s#:# #gp" passwd
awk -F ":" -vOFS=" " ‘{$1=$1;print $0}‘ passwd
awk -F ":" -v OFS=" " ‘{for(i=1;i<NF;i++)printf"%s ",$i;printf"\n"}‘ passwd
如果$0发生了改变(通过赋值或者替换),那么$1,$2以及NF就会被重新计算,同样的道理,
当$1或者$2被改变了,那么$0就会被重新构造,构造的方式是使用OFS?重新分隔字符

7,sed awk排除配置文件里面没用的行(配置文件里面的空行和含有#号开头的行)

sed -ri ‘/^ *(#.*)?$/‘d sshd_config
awk ‘!/^ *(#.*)?$/{print $0}‘ sshd_config 

8,如何用awk取出来最多列数所在的哪一行行号

测试环境:

[[email protected] tmp]# cat 1.txt
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
3 4 5 1 2 3 4 5 6 7 8
1 2 3 4 5 6
1 2 3 4 5 6 7

答案:

awk ‘BEGIN{lin=0;nf=0}{if(nf < NF){lin=NR;nf=NF}}END{print "行号:"lin,"列数:"nf}‘ 1.txt 

9,输出字符串最行的行号

测试环境:

[[email protected] tmp]# cat 1.txt
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
3 4 5 1 2 3 4 5 6 7 8
1 2 3 4 5 6
1 2 3 4 5 6 7

答案
awk ‘{if(length($0) &gt; LE ){LE=length($0);nr=NR}}END{print LE,nr}‘ /etc/passwd

10,显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135,不允许使用sed,和OFS

cat >>reg.txt<<EOF
Zhang Dandan    41117397   :250:100:175
Zhang Xiaoyu    390320151  :155:90:201
Meng  Feixue    80042789   :250:60:50
Wu    Waiwai    70271111   :250:80:75
Liu   Bingbing  41117483   :250:100:175
Wang  Xiaoai    3515064655 :50:95:135
Zi    Gege      1986787350 :250:168:200
Li    Youjiu    918391635  :175:75:300
Lao   Nanhai    918391635  :250:100:175
EOF

答案:
awk ‘$2~/Xiaoyu/{gsub(":","$",$NF);print $NF}‘ reg.txt

11,生成一个随机的三位数

awk ‘BEGIN{ srand() ; print int( rand() * 1000 ) }‘ /etc/passwd
详解:

rand如果不配合srand使用的话,产生的随机数都是固定的
rand产生的随机数范围是 0 <= rand() <1 的
取三位数,我们就把rand()* 1000然后在去他整数部分的值即可
srand() 必须在BEGIN模块里面

12,求一个文件里面 ‘1’ 字符出现的次数:

awk ‘{a=gsub(/1/,"Q");sum = sum + a ; print $0,a}END{print "一共替换了:"sum}‘ reg.txt
解题:
我们直接求文件里面1出现的次数不好求,我们可以利用gsub返回替换次数的特性来解答这个

13,统计这个日志文件中secure-20161219,别人一个ip地址破解了我们哪些用户的密码,一个用户被哪些IP地址破解了

awk ‘/Failed/ { sum[$(NF-3)" "$(NF-5)]++}END{for(i in sum) print sum[i],i}‘ secure-20161219 |grep [ user_name | IP ]

14,把这个两个文件都存在的用户的密码输出出来

[[email protected] student]# head file1 file2
==> file1 <==
oldboy   1234
alex    4567
lidao   9999

==> file2 <==
001 lidao
002 alex
003 oldboy
004 oldgirl
提示:需要用到如何判断这两个文件不是一个文件。

解题思路

awk ‘FNR==NR{h[$1]=$2}FNR!=NR{print h[$2]}‘ file1 file2
awk ‘FNR==NR{h[$1]=$2;next}{print h[$2]}‘ file1 file2
//next 满足前面这个条件就不执行后面的内容了

#!/bin/bash
for i in `awk ‘{print $1}‘ file1`
do
    for j in `awk ‘{print $2}‘ file2`
        do
        if [ $i == $j ];then
            awk ‘$1~/‘$i‘/{print $2}‘ file1
        fi
        done
done

绝望系列

####绝望1:

每周绝望原数据文件:
id=aa&bb&type&name=cc
bb&id=aa&name=cc&type
id=aa&type&bb&name=dd
type&id=aa&cc&name=bb
id=bb&cc&type&name=bb
aa&id=bb&name=bb&type

整理并去重,得到效果:
id=aa&bb&name=cc&type
id=aa&bb&name=dd&type
id=aa&cc&name=bb&type
id=bb&cc&name=bb&type
id=bb&aa&name=bb&type

提示:awk循环、判断、变量赋值、去重机制
awk -F ‘&‘ -v OFS=‘&‘ ‘{for(i=1;i<=4;i++)printf"%s" $i;printf "\n"}‘ awk.txt 实现每个遍历了

awk -F ‘&‘ -v OFS=‘&‘ ‘{for(i=1;i<=4;i++){if($i~/^id.$/)A=$i;if($i~/^[a-z]{2}$/)B=$i;if($i~/^name./)C=$i;if($i~/^type$/)D=$i}print A,B,C,D}‘ awk.txt

echo {a..z} | xargs -n 1 >awk.txt
利用awk去除g所在行的上下5行
for j in awk ‘/^j$/{for(i=NR-5;i&lt;=NR+5;i++)print i}‘ 1.txt;do awk -v j=$j ‘NR==j{print $0}‘ 1.txt;done

原文地址:http://blog.51cto.com/13447608/2285552

时间: 2024-08-05 12:25:58

awk练习题的相关文章

[shell]grep sed awk 练习题

下面是简单学习之后做得练习题,如果有不对的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500 Igor Chevsky:385-375-8395:3567 Populus Place, Caldw

[shell练习]——awk练习题

1. sed和awk有什么区别? (1)awk:按列(域)操作:sed:按行操作(2)awk:文本处理语言,适合对文本进行抽取处理:sed:非交互式的编辑器,适合对文本进行编辑 2. awk要处理域的时候,以哪个参数作为分割参数? -F 3. 请打印出/etc/passwd 第一个域,并且在第一个域所有的内容前面加上“用户帐号:”# cat /etc/passwd |awk -F: '{print"用户帐号:"$1}' 4. 请打印出/etc/passwd 第三个域和第四个域# awk

grep,sed,awk工具的使用

grep过滤特定的行 1.把包含'halt'的行以及这行下面的两行都打印出来. [[email protected] ~]# cp /etc/passwd /tmp/ [[email protected] ~]# cd /tmp/ [[email protected] tmp]# grep -A2 'halt' passwd halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x

文本文件查找,正则 sed awk

二.  sed 格式 :   sed '内容'p -n 文件   打印某行  内容为英文用 / /括起来           sed '内容'd  文件   打印除内容以外其他行 sed    不加-i 进行查看    加上-i  对源文件进行操作             -r 不需要脱义  ? + ( ) | 需要脱义          打印指定行 sed '10'p -n 1.txt;        不加-n 会每行出现2次,打印第10行            sed '1,4'p -n 1

[转]shell awk sed tr grep 语法汇总

tr 基本语法 -c          # 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII  -d          # 删除字符串1中所有输入字符  -s          # 删除所有重复出现字符序列,只保留第一个:即将重复出现字符串压缩为一个字符串  [a-z]       # a-z内的字符组成的字符串  [A-Z]       # A-Z内的字符组成的字符串  [0-9]       # 数字串  \octal      # 一个三位的八进制数,对应有效的ASCII字符 

linux笔记(28)sed和awk的联系及拓展

sed练习题 把/etc/passwd 复制到/root/test.txt,用sed打印所有行 [[email protected] sed]# sed -n '1,$p' passwd 打印test.txt的3到10行 [[email protected] sed]# sed -n '3,10'p passwd 打印test.txt 中包含 'root' 的行 [[email protected] sed]# sed -n '/root/'p passwd 删除test.txt 的15行以及以

十五 awk文本处理

awk编程语言/数据处理引擎 创造者:Aho.Weinberger.Kernighan 基于模式匹配检查输入文本,逐行处理并输出 通常用在Shell脚本中,获得指定的数据 单独用时,可对文本数据做统计 基本用法 语法格式 前置命令 | awk [选项] '[条件]{编辑指令}' awk [选项] '[条件]{编辑指令}' 文件 在编辑指令中,若有多条语句,可用分号分隔,print是最常用的指令 常用命令选项 命令选项 注释 -F 指定分隔符,可省略(默认空格或Tab位):符号分隔需要用双引号"&

sed 删除最后几行 和删除指定行 awk使用

sed 删除最后几行 和删除指定行 转载原文链接:http://blog.51cto.com/lspgyy/1305489 sed 想删除文件中的指定行,是可以用行号指定也可以用RE来匹配的. 删除指定的行[可以指定行号删除.匹配字符串来删除] [[email protected] ~]# cat -n seq.txt 1 ok i will help you 2 understand sed usage 3 how to use it 4 and we should use it in vie

干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!

1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2unix # windows文本转linux文本 unix2dos # linux文本转windows文本 enca filename # 查看编码 安装 yum install -y enca md5sum # 查看md5值 ln 源文件 目标文件 # 硬链接 ln -s 源文件 目标文件 # 符号