如何用awk抽取固定样式字串
-
- 帖子: 1
- 注册时间: 2012-04-13 22:56
如何用awk抽取固定样式字串
如何用awk能从一个文本文件抽取出如下固定样式字串 “/NUM 123 456/”, 后面六位数字是可变的,
如果我直接用 awk '/NUM/' filename 会找出2行,因为其他地方也有NUM这个关键字。需求是只能找到这种样式(带空格)/NUM 123 456/, 并抽取出后面6位数字待用。
请大家帮我出处注意,什么awk script最好解决问题。
谢谢了
文件例子,
---S&E
1 XXXXX TAFI SPECIAL PIC/LPIC/PCA USOC
/PIC 0377/PCA BO
/LPIC 0377
1 1F4CL
/TN 706 964-5301/ZBDI P3225037495/NUM 423 496/INVU /LPCA BO, 03-19-12/LRN 4234960000/NMC /PKG COS-WW-PAMA8/TTRA 706 492/ZSER F8099999A0/SED 03-29-12
1 BSLYG
/TN 706 964-5301/ZBDI P3225037495/ZPRL X129GFGE/ZSER 23099999A6/SED 03-29-12
1 BSL5O
/TN 706 964-5301/ZBDI P3225037495/ZPRL X129GFGE/ZSER 1C099999A5/SED 03-29-12
1 BUNAH
/TN 706 964-5301/ZBDI P3225037495/NUM1AZ2A/ZSER 00099999A1/SED 03-29-12
1 ESC
/TN 706 964-5301/ZBDI P3225037495/PKG COS-WW-PAMA8/ZSER 2A099999A7/SED 03-29-1
如果我直接用 awk '/NUM/' filename 会找出2行,因为其他地方也有NUM这个关键字。需求是只能找到这种样式(带空格)/NUM 123 456/, 并抽取出后面6位数字待用。
请大家帮我出处注意,什么awk script最好解决问题。
谢谢了
文件例子,
---S&E
1 XXXXX TAFI SPECIAL PIC/LPIC/PCA USOC
/PIC 0377/PCA BO
/LPIC 0377
1 1F4CL
/TN 706 964-5301/ZBDI P3225037495/NUM 423 496/INVU /LPCA BO, 03-19-12/LRN 4234960000/NMC /PKG COS-WW-PAMA8/TTRA 706 492/ZSER F8099999A0/SED 03-29-12
1 BSLYG
/TN 706 964-5301/ZBDI P3225037495/ZPRL X129GFGE/ZSER 23099999A6/SED 03-29-12
1 BSL5O
/TN 706 964-5301/ZBDI P3225037495/ZPRL X129GFGE/ZSER 1C099999A5/SED 03-29-12
1 BUNAH
/TN 706 964-5301/ZBDI P3225037495/NUM1AZ2A/ZSER 00099999A1/SED 03-29-12
1 ESC
/TN 706 964-5301/ZBDI P3225037495/PKG COS-WW-PAMA8/ZSER 2A099999A7/SED 03-29-1
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 如何用awk抽取固定样式字串
非要 Awk?grep 不行?
- b33e
- 帖子: 3874
- 注册时间: 2011-06-07 14:20
Re: 如何用awk抽取固定样式字串
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 如何用awk抽取固定样式字串
如果文件结构完全陌生,或无规律,不知道NUM6个数在那个字段的话。
用grep提取符合条件(包含NUM空格3个数空格3个数)的行,再用sed命令提取需要的6个数字
thefile是放楼主想要处理的文本的文件名
代码: 全选
grep 'NUM [0-9][0-9][0-9] [0-9][0-9][0-9]' thefile | sed 's/.*NUM \([0-9][0-9][0-9] [0-9][0-9][0-9]\).*/\1/'
thefile是放楼主想要处理的文本的文件名
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 如何用awk抽取固定样式字串
ls不知道grep -o的

但楼主如果只想要NUM后的6个数,还要sed一下吧?
是指的[0-9][0-9][0-9的简写吗,忘记怎么写了。也不知道正则的多个匹配的嘛
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 如何用awk抽取固定样式字串
无论如何,用 grep 管道到 sed 都不是个好注意,sed 就可以完成 grep 的功能。cao627 写了:ls不知道grep -o的学习
但楼主如果只想要NUM后的6个数,还要sed一下吧?
是指的[0-9][0-9][0-9的简写吗,忘记怎么写了。也不知道正则的多个匹配的嘛
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 如何用awk抽取固定样式字串
恩无论如何,用 grep 管道到 sed 都不是个好注意,sed 就可以完成 grep 的功能。
我对各命令的详细选项掌握的不周。只知道基本概念,然后就按思路将他们凑成需要的组合。
楼主的需求:是匹配 NUM [0-9]{3} [0-9]{3} ,然后提取NUM 后的六个数,怎么简单实现呢?
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 如何用awk抽取固定样式字串
cao627 写了:
楼主的需求:是匹配 NUM [0-9]{3} [0-9]{3} ,然后提取NUM 后的六个数,怎么简单实现呢?
代码: 全选
grep -oP '(?<=NUM )\d{3} \d{3}'
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 如何用awk抽取固定样式字串
代码: 全选
grep -oP '(?<=NUM )\d{3} \d{3}'

-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 如何用awk抽取固定样式字串
lilydjwg 给的 grep 是最完美的解决方案。用 sed 的办法,只要在你的例子中稍微改一下就可以了。cao627 写了:恩无论如何,用 grep 管道到 sed 都不是个好注意,sed 就可以完成 grep 的功能。
我对各命令的详细选项掌握的不周。只知道基本概念,然后就按思路将他们凑成需要的组合。
楼主的需求:是匹配 NUM [0-9]{3} [0-9]{3} ,然后提取NUM 后的六个数,怎么简单实现呢?
代码: 全选
sed -n 's/.*NUM \([0-9][0-9][0-9] [0-9][0-9][0-9]\).*/\1/p' thefile
- b33e
- 帖子: 3874
- 注册时间: 2011-06-07 14:20
-
- 帖子: 992
- 注册时间: 2007-12-05 10:57
- 系统: ubuntu14.04
- 来自: 金山
Re: 如何用awk抽取固定样式字串
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression.
怪不得看不懂,不想深入了
但还是好奇(?<=NUM )?
谁能解释解释吗
表达式本身,能将自己匹配到的内容,做进一步截取?这只是Perl regular expression的特性吗?
Interpret PATTERN as a Perl regular expression.
代码: 全选
(?<=NUM )\d{3} \d{3}\d{3} \d{3}
但还是好奇(?<=NUM )?
谁能解释解释吗
表达式本身,能将自己匹配到的内容,做进一步截取?这只是Perl regular expression的特性吗?
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 如何用awk抽取固定样式字串
http://deerchao.net/tutorials/regex/reg ... lookaroundcao627 写了:-P, --perl-regexp
Interpret PATTERN as a Perl regular expression.
怪不得看不懂,不想深入了代码: 全选
(?<=NUM )\d{3} \d{3}\d{3} \d{3}
但还是好奇(?<=NUM )?
谁能解释解释吗
表达式本身,能将自己匹配到的内容,做进一步截取?这只是Perl regular expression的特性吗?
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙