随笔分类 - awk 题目讲解
发表于 2014-02-28 16:21阅读:630评论:0推荐:0
摘要:【场景】有大概这样的IP段列表,111.0.0.0-111.188.255.010.0.0.0-99.0.0.088.0.0.0-100.0.0.0复制代码如何用脚本 生成一文件内容为111.0.0.0111.0.0.1111.0.0.2111.0.0.3...111.188.255.0【分析】 题意是:生成两个IP之前IP列表;若IP的前3个是相同的;这样处理就很好解决。其实大家可以仿照之前的工时脚本那篇博客的思路来解决。不过下面的代码更好一点;好在自定义函数的代码。同理之前的工时脚本也可以按照下面的代码思路来写自定义函数【代码】function ip2n(ip, n,c){split(i.
阅读全文 »
发表于 2014-01-15 21:27阅读:1120评论:0推荐:0
摘要:场景其实之前有人问过的,算是月经贴了~不过想问个复杂点的。比如一个文本,他只是第二第三列相同,其他列都不一样,我想把相同的变成一行,不同的合并起来怎么做呢?ex:1 hhh YYY 12345662 hhh YYY 1663 YYY hhh dhu4 hhh YYY 125665 YYY hhh 8886 hhh YYY 12566(注意这里)7 YYY hhh d888 YYY hhh dhu复制代码然后得到:1/2/4/6 hhh YYY 1234566;166;12566;3/5/7/8 YYY hhh dhu;888;d88;原帖地址:http://bbs.chin...
阅读全文 »
发表于 2013-12-17 22:31阅读:427评论:0推荐:0
摘要:原帖http://www.itpub.net/thread-1835425-1-2.html【场景】insert into test values('a','20131213','EQ',131313,333333)insert into test values('a','20131216','EQ',161616,666666)insert into test values('a','20131217','EQ',171717,777777)inse
阅读全文 »
发表于 2013-12-10 21:29阅读:305评论:0推荐:0
摘要:【场景】A文件如下所示:ENSMUSG00000000001 190ENSMUSG00000000001 153ENSMUSG00000000002 129ENSMUSG00000000003 128ENSMUSG00000000003 157ENSMUSG00000000003 141ENSMUSG00000000004 42ENSMUSG00000000004 117ENSMUSG00000000004 87ENSMUSG00000000004 2323想要转化成的文件如下所示:ENSMUSG00000000001 0 190ENSMUSG00000000001 191 343ENSMUS
阅读全文 »
发表于 2013-12-06 21:53阅读:1220评论:0推荐:0
摘要:【场景】表A 表Bregion name name重庆 a a............ ........广州 b ...
阅读全文 »
发表于 2013-12-05 20:15阅读:321评论:0推荐:0
摘要:【场景】如何将字符串“85M21505-001,LWL50JB5EB7N,LWL50JB5EBBN,85M21505-013,85M21505-015,LWL50JB5EBGN”拆分为平均长度小于等于40的行,以逗号拆分。因为表的某列栏位长度是40,插入会超过范围,想通过拆分为几行的方式插入,能不能实现这样的效果,求大神指点!!!拆分的结果如下:85M21505-001,LWL50JB5EB7N,LWL50JB5EBBN,(每一行长度不超过40)85M21505-013,85M21505-015,LWL50JB5EBGN【代码实现】echo "85M21505-001,LWL50JB
阅读全文 »
发表于 2013-12-03 21:41阅读:355评论:0推荐:0
摘要:【场景】有个如下结果的表xm rq mdd张三 2013.10.01 山东张三 2013.10.05 江苏张三 2013.10.10 云南李四 2013.10.07 安徽李四 2013.10.10 上海---------------------------------------------------------------------------想产生一个如下结果姓名 日期 目的地 来自这里张三 2013.10.0...
阅读全文 »
发表于 2013-12-03 21:30阅读:1758评论:0推荐:0
摘要:【需求】我的初始文件如下:CKBD2BWP7T 8 15 60 CKBD2BWP7T RDT_CKB_00 (:I(1'b0), :Z());DFNCND2BWP7T 1 15 15 DFNCND2BWP7T RDT_DFNCN_00 (:CPN(1'b0), :D(1'b0), :Q(), :QN(), :CDN(1'b0));LNCND2BWP7T 2 15 30 LNCND2BWP7T RDT_LNCN_00 (:EN(1'b0), :D(1'b0), :Q(), :QN());我想用sed命令做成如下格式:CKBD2BWP7T:IDFNC
阅读全文 »
发表于 2013-11-29 21:09阅读:376评论:0推荐:0
摘要:【场景】a.txt b.txt c.txta aqz a qzb3 b3d b3 df f234 f 234e accc a ccc假如a.txt不重复b.txt也是不重复,以a.txt中做为分割词,对b.txt进行分割 得 c.txt【代码】> awk 'NR==FNR{a[$1];next}{for(i in a){if(index($0,i)){l=split($0,b,i);s=i}}...
阅读全文 »
发表于 2013-11-27 22:18阅读:231评论:0推荐:0
摘要:公司设备上要写一个自动检测的脚本,内容如下:Active PDP contexts: 246509Available IP-addresses: 379999Active PDP contexts: 13028Available IP-addresses: 47780Active PDP contexts: 21164Available IP-addresses: 105447Active PDP contexts: 0Available IP-addresses: 29Active PDP contexts: 21914Available IP-addresses: 230419检测的内容是
阅读全文 »
发表于 2013-11-25 21:58阅读:2419评论:0推荐:1
摘要:对awk而言,数组是它一个亮点。如何遍历数组呢? 采用for(i in a)是最有效的,也是我们最喜欢用的;但问题是打印出来不是排序的。今天我们学习函数asort,asorti函数可 以解决我们的困扰!两者排序区别:asort(a [,b]) 是对数组的值进行排序,并且会丢掉原先键值;返回数组元素的个数。asorti(a,b) 是对数组的下标进行排序;返回数组元素的个数。数据文件data内容:1 1 202 25 453 20 944 60 30 awk是关联数组。for…in循环输出时候,默认打印出来是无序数组,也是随机的。[li0924@localhost awk]$ awk '{
阅读全文 »
发表于 2013-11-20 21:56阅读:330评论:0推荐:0
摘要:【场景】1 14 1015 12 8 1015 23 8 1015 34 1 1016 35 8 1019 16 6 1019 27 2 1019 3.......要达到的效果是:1 1015 14 8 82 1016 13 1019 8 6 2【代码】awk '{if(a==$2 || ! a){b[$3]=$1}else{if(! i in b)b[i]=FS;print a "\t" b[1] "\...
阅读全文 »
发表于 2013-10-21 22:28阅读:251评论:0推荐:0
摘要:【场景】 比如说我有3个文件 a.txt b.txt c.txt 他们的行数相同 其中c.txt中有一些是空行,我想把c.txt中的这些空行删掉,同时对应的a.txt和b.txt的这些行数也要去掉 请问应该怎么做呢??【代码】awk 'FNR==NR{if(! NF) a[FNR]=1;else print > FILENAME;next}{if(! a[FNR]) print>FILENAME}' c a b【解析】 FNR:awk内置变量;当前文件已读的行数。 NR:已读的行数。 NF: 域的个数;空行则为0 FILENAME:当前读的文件名字对C文件;存在空行
阅读全文 »
发表于 2013-10-12 22:06阅读:1768评论:0推荐:0
摘要:其实这个在该系列六已经讲解如何去行求和!在此需求我就不累赘了!再重新讲解无非是提供一种新方法;利用数组来实现(之前是借用了变量)!【代码如下】1 awk '{s=0;for(i=2;i<=NF;i++){s+=$i};print $0 , s}'2 awk '{for(i=2;i<=NF;i++){a[NR]+=$i}print $0,a[NR]}'第二种方法优势在于;利用行数作为下标;这样不用每次都初始化a[NR]=0!
阅读全文 »
发表于 2013-10-12 21:55阅读:265评论:0推荐:1
摘要:正如需求如下:能否实现这样的功能,如下数据 6 7 8 9 10 16 17 22 23 24 25 26 28 29 30能输出每段连续数字的开始和结束数字,如 6 10 16 17 22 26 28 30【代码】我提供2种写法:写法一:awk '{print $0"\n"$0+1}' file|uniq -u|awk '{print;getline d;print d-1}'|uniq【解析】1:利用$0"\n"$0+1;例如前两行会打印出6"\n"7,7"\n"8;再利用uni
阅读全文 »
发表于 2013-09-29 23:39阅读:832评论:0推荐:0
摘要:【应用场景】--描述如下有如下文本:account time dept: 1号--------------------------------------------------------------------------A4 2 60.00A3 3 120.00B16 6 90.00total 11 ...
阅读全文 »
发表于 2013-09-29 23:28阅读:285评论:2推荐:0
摘要:【场景】有一文件aa如下: 650571.37 2188705.56 1. 654437.44 2187283.55 1. 653184.30 2187230.23 1. 652925.37 2187289.22 1. 650571.37 2188705.56 1. 649691.51 2186999.15 1. ...
阅读全文 »
发表于 2013-09-24 20:15阅读:462评论:0推荐:0
摘要:【场景】有文本如下99 line0 100 line1 100 line2 101 line3 102 line4 103 line5 103 line6【实现效果如下】如何将首列相同的相邻行筛选出,能到到如下结果100 line1 100 line2 103 line5 103 line6【代码如下:】awk '{a[NR]=$1;b[NR]=$0}END{for(i=1;i<=NR;i++){if(a[i]==a[i+1])print b[i]"\n"b[i+1]}}'【解析】 跟上篇原理差不多;【拓展】这下面有关阴月飞兄的代码;有点深奥;awk
阅读全文 »
发表于 2013-09-23 23:06阅读:4784评论:0推荐:1
摘要:【场景】 在一个大文件中(上千行数据);取NR%126的值为1-8,76的行。看有没有很好的写法【实现】[li0924@localhost lottu]$ seq 300|awk '{A=NR%126;if(A>=1&&A<=8||A==76)print}'1234567876127128129130131132133134202253254255256257258259260还有seesea兄的巧妙的思路,利用数组的值;代码如下:awk 'BEGIN{for(i=1;i<=8;++i) ar[i]=1; ar[76] = 1;} (N
阅读全文 »
发表于 2013-09-18 08:10阅读:497评论:0推荐:0
摘要:【场景】--达到uniq命令的效果1. 若是去除重复行;我们很快会想到1 cat input.txt | sort | uniq2 awk '! a[$0]++' input.txt2. 若要只实现像命令uniq的效果呢?例如文本fileaaaafffeeffffffeeeebbbbaaView Code 效果如“uniq file”[li0924@localhost awk]$ uniq fileaafffeefffeebbaa若用awk来怎么实现呢?awk '{a[NR]=$0}END{s=a[1];for(i=1;i1)print i}}' 【解析】有了上
阅读全文 »