每日一题--5 awk进阶

每周绝望原数据文件:
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<=NR+5;i++)print i}‘ 1.txt `;do awk -v j=$j ‘NR==j{print $0}‘ 1.txt;done

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

时间: 2024-10-11 12:16:31

每日一题--5 awk进阶的相关文章

老男孩教育每日一题-第126天-通过shell脚本打印乘法口诀表

问题背景: 生成9*9乘法表 [[email protected] ~]# seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}' 1x1=1 1x2=2   2x2=4 1x3=3   2x3=6   3x3=9 1x4=4   2x4=8   3x4=12  4x4=16 1x5=5

&#8203;老男孩教育每日一题-第85天-下面这个脚本直接执行没有问题,在定时任务中有问题,什么原因?

脚本内容: [[email protected] scripts]# cat /server/scripts/ip.sh  #!/bin/bash IP=$(ifconfig eth0 |awk -F "[ :]+" 'NR==2{print $4}') echo "ip:$IP" >> /tmp/ip.txt 定时任务: [[email protected] scripts]# crontab -l * * * * * /bin/bash /serve

老男孩教育每日一题-第84天-两个文件,把第一个文件中的第2、3行内容添加到第二个文件的第3行后面

两个文件如下: [[email protected] ~]# cat 1.txt  111 222 333 [[email protected] ~]# cat 2.txt AAA bbb ccc ddd 要求修改后的文件 [[email protected] ~]# cat 2.txt  AAA bbb ccc 222 333 ddd `` 参考答案: 方法1: [[email protected] ~]# sed -n 2,3p 1.txt |xargs |sed -r 's# #\\n#g

老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写

老男孩教育每日一题-2017年5月4日-有一个oldboy.txt文件,把里面所有字母都转换成大写 文件内容如下: [[email protected] oldboy]# cat oldboy.txt  oldboy.blog.51cto.com www.oldboyedu.com 方法一:sed [[email protected] oldboy]# sed 's#[a-z]#\u&#g' oldboy.txt OLDBOY.BLOG.51CTO.COM WWW.OLDBOYEDU.COM 方

老男孩教育每日一题-2017年5月17日-使用三剑客进行变化格式

1.题目 原始数据: 17/Apr/2015:09:29:24 +0800 17/Apr/2015:09:30:26 +0800 17/Apr/2015:09:31:56 +0800 18/Apr/2015:09:34:12 +0800 18/Apr/2015:09:35:23 +0800 19/Apr/2015:09:23:34 +0800 19/Apr/2015:09:22:21 +0800 20/Apr/2015:09:45:22 +0800 期望结果: 2015-04-17 09:29:

&#8203;老男孩教育每日一题-第102天-如何找出/usr/local 下面所有shell脚本文件,并设置执行权限?

方法1.正常思路版本 find /usr/local/ -type f -name "*.sh" |xargs chmod +x chmod +x ` find /usr/local/ -type f -name "*.sh"` find /usr/local/ -type f -name "*.sh" -exec chmod +x {} \; 可是这个方法不严谨,因为有的脚本不是以.sh结尾的. 方法2.精确方法 通过file命令查看文件类型,

老男孩教育每日一题-2017年5月22日-命令风暴:变量a=’a/b/c’如何截取得到c

1.题目 2.参考答案 系统环境 [[email protected] ~]# uname -r2.6.32-504.el6.x86_64 [[email protected] ~]# cat /etc/redhat-releaseCentOS release 6.6 (Final) [[email protected] ~]# a='a/b/c' 方法1-cut [[email protected] ~]# echo $a | cut -c5c 方法2-tr替换 [[email protect

老男孩教育每日一题-2017年4月26日-通过访问日志access.log统计IP和每个地址访问的次数

通过访问日志access.log统计IP和每个地址访问的次数 101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662 "http://m.oldboyedu.com/mobile/theme/oldboyedu/home/index.html" "Mozilla/5.0 

老男孩教育每日一题-第89天-根据如下描述使用正则表达式取出内容

题目: 显示/etc/inittab中以#开头,且后面跟了一个或多个空白字符,而后又跟了任意非空白字符的行 参考答案: 方法一-grep/egrep egrep "^#[[:blank:]]+[^[:blank:]]*" /etc/inittab   grep -P "^#[ \t]+[^ \t]*" /etc/inittab   grep -P "^#\s+\S+" /etc/inittab 方法二-sed sed -n '/^#[[:blan