免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4419 | 回复: 17
打印 上一主题 下一主题

求助:awk中正则表达式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-13 15:37 |只看该作者 |倒序浏览
cat a.lst

xxxx   xxxx_1234_5678_xxxx.log  xxxx
xxxx   xxxx_2234_xxxx.log          xxxx
xxxx   3234_xxx_xxx.log             xxxx
xxxx   xxxx_xxxx_4234.log          xxxx


我想将a文件中每一行$2里的数字提出来作为首列,请问大家该如何做到
只取两个_之间只有数字的情况

以下是希望的结果
cat result.lst

1234  xxxx   xxxx_1234_5678_xxxx.log xxxx
5678  xxxx   xxxx_1234_5678_xxxx.log xxxx
2234  xxxx   xxxx_2234_xxxx.log        xxxx
3234  xxxx   3234_xxx_xxx.log           xxxx
4234  xxxx   xxxx_xxxx_4234.log        xxxx

谢谢大家哈

[ 本帖最后由 papokaka 于 2009-4-13 15:40 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-13 15:53 |只看该作者
  1. awk '{split($2,array,"_");for(i in array){if(array[i]~/[0-9]/){print array[i],$0}}}'  urfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-04-13 15:59 |只看该作者

回复 #2 aboy11 的帖子

awk '{split($2,array,"[_.]");for(i in array){if(array~/[0-9]/){print array,$0}}}'  urfile
似乎更好点

论坛徽章:
0
4 [报告]
发表于 2009-04-13 16:03 |只看该作者
原帖由 youshuang 于 2009-4-13 15:59 发表
awk '{split($2,array,"[_.]");for(i in array){if(array~/[0-9]/){print array,$0}}}'  urfile
似乎更好点


恩,多谢指正!

论坛徽章:
0
5 [报告]
发表于 2009-04-13 16:09 |只看该作者

回复 #3 youshuang 的帖子

似乎有错误呢,array的用法麻烦讲解一下

awk '{split($2,array," [_.] ");for(i in array){if(array~/[0-9]/){print array,$0}}}' a.txt

awk: cmd. line:1: (FILENAME=a.txt FNR=1) fatal: attempt to use array `array' in a scalar context

[ 本帖最后由 papokaka 于 2009-4-13 16:10 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-04-13 16:16 |只看该作者
[root@Mylinux tmp]# awk '{print gensub(/[^0-9]*([0-9]+).*/,"\\1",1,$2),$0}' file
1234 xxxx   xxxx_1234_5678_xxxx.log  xxxx
2234 xxxx   xxxx_2234_xxxx.log          xxxx
3234 xxxx   3234_xxx_xxx.log             xxxx
4234 xxxx   xxxx_xxxx_4234.log          xxxx

论坛徽章:
0
7 [报告]
发表于 2009-04-13 16:17 |只看该作者

回复 #5 papokaka 的帖子

[root@Greendays lianshou]# awk '{split($2,array,"[_.]");for(i in array){if(array~/[0-9]/){print array,$0}}}' ac
1234 xxxx   xxxx_1234_5678_xxxx.log  xxxx
5678 xxxx   xxxx_1234_5678_xxxx.log  xxxx
2234 xxxx   xxxx_2234_xxxx.log          xxxx
3234 xxxx   3234_xxx_xxx.log             xxxx
4234 xxxx   xxxx_xxxx_4234.log          xxxx

论坛徽章:
0
8 [报告]
发表于 2009-04-13 16:42 |只看该作者

回复 #6 ywlscpl 的帖子

$cat a.txt
asd  asd12_1234_xxx.log
asd  xxxx_xxx_xxx.log
asd  xxxx_xxx_2234.log
asd  xxxx_xxx_xxx.log
asdas xxxx_xxx_xxx.log
asd xxxx_xxx_xxx.log

$ awk '{print gensub(/[^0-9]*([0-9]+).*/,"\\1",1,$2),$0}' a.txt
12 asd  asd12_1234_xxx.log
xxxx_xxx_xxx.log asd  xxxx_xxx_xxx.log
2234 asd  xxxx_xxx_2234.log
xxxx_xxx_xxx.log asd  xxxx_xxx_xxx.log
xxxx_xxx_xxx.log asdas xxxx_xxx_xxx.log
xxxx_xxx_xxx.log asd xxxx_xxx_xxx.log
-----------------
好奇怪,是我的awk版本和你们的不符吗....
我用7楼的法子也是带了参数就会出现错误
$ awk '{split($2,array,"[_.]");for(i in array){if(array~/[0-9]/){print array,$0}}}' a.txt
awk: cmd. line:1: (FILENAME=a.txt FNR=1) fatal: attempt to use array `array' in a scalar context

论坛徽章:
0
9 [报告]
发表于 2009-04-13 16:44 |只看该作者

回复 #8 papokaka 的帖子

有斜体文字说明,他们有用i变量数组,并且被隐藏了。

论坛徽章:
0
10 [报告]
发表于 2009-04-13 16:45 |只看该作者

回复 #5 papokaka 的帖子

晕死,我拷贝的,居然也拷贝错了,array要改成array,你看前面那个人的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP