免费注册 查看新帖 |

Chinaunix

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

Awk 实例-->多行记录..问题 [复制链接]

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-30 19:47 |只看该作者 |倒序浏览
原始URL:http://www.ibm.com/developerworks/cn/linux/shell/awk/awk-2/

---
譬如,让我们讨论一下如何完成处理“联邦证人保护计划”所涉及人员的地址列表的任务:

Jimmy the Weasel
100 Pleasant Drive
San Francisco, CA 12345
Big Tony
200 Incognito Ave.
Suburbia, WA 67890


理论上,我们希望 awk 将每 3 行看作是一个独立的记录,而不是三个独立的记录。如果 awk 将地址的第一行看作是第一个字段 ($1),街道地址看作是第二个字段 ($2),城市、州和邮政编码看作是第三个字段 $3,那么这个代码就会变得很简单。以下就是我们想要得到的代码:

BEGIN {
    FS="\n"
    RS=""
}



在上面这段代码中,将 FS 设置成 "\n" 告诉 awk 每个字段都占据一行。通过将 RS 设置成 ""

============
对BEGIN引入的费解.....请看“联邦证人保护计划”的资料,FS="\n"表示换行,RS=""表示空格......


希望 awk 将每 3 行看作是一个独立的记录....能成吗?我很费解...

[ 本帖最后由 action08 于 2008-5-30 19:56 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2008-05-30 21:44 |只看该作者

回复 #1 action08 的帖子

应该是Common threads: http://www.ibm.com/developerworks/linux/library/l-awk2.html的错误:
  1. Jimmy the Weasel
  2. 100 Pleasant Drive
  3. San Francisco, CA 12345
  4. Big Tony
  5. 200 Incognito Ave.
  6. Suburbia, WA 67890
复制代码

应有一空行:
  1. Jimmy the Weasel
  2. 100 Pleasant Drive
  3. San Francisco, CA 12345

  4. Big Tony
  5. 200 Incognito Ave.
  6. Suburbia, WA 67890
复制代码

[ 本帖最后由 blackold 于 2008-5-30 21:49 编辑 ]

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
3 [报告]
发表于 2008-05-30 22:24 |只看该作者
空的那一行,是不是就一个\n,还是有个\space?

且看字段:Jimmy the Weasel里面也有空格的呀,怎么就没有被认为是一个记录呢?

我很费解这里的语法,现在没有linux,哪位兄弟再详细讲解一下.......马上要考试了。

论坛徽章:
0
4 [报告]
发表于 2008-05-30 22:28 |只看该作者

回复 #3 action08 的帖子

BEGIN {
    FS="\n"
    RS=""
}

RS="" ,是空串,并非空格

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
5 [报告]
发表于 2008-05-30 22:56 |只看该作者
凭什么空串可以匹配第3行尾的神秘“结束”呢? 还有第6行的,原记录中到底用什么特别标志的呢?


空串是否可以是(我罗列下来)
\n
\t
\n\n
\space
\space\space
\space\n
......
如此组合?你可以把不符合的说出来........

[ 本帖最后由 action08 于 2008-5-30 23:13 编辑 ]

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
6 [报告]
发表于 2008-05-30 23:14 |只看该作者
补充回2楼,原文没有错误,就是没有空行....可以从文字描述中推断出来。“每三行”

论坛徽章:
0
7 [报告]
发表于 2008-05-31 01:07 |只看该作者
原帖由 action08 于 2008-5-30 23:14 发表
补充回2楼,原文没有错误,就是没有空行....可以从文字描述中推断出来。“每三行”

如果没有空行,就得不到正确的结果了,猜也可以猜出来少了空行~~

论坛徽章:
0
8 [报告]
发表于 2008-05-31 07:51 |只看该作者

回复 #5 action08 的帖子

man awk
  1.   Records
  2.       Normally, records are separated by newline characters.  You can control
  3.       how  records are separated by assigning values to the built-in variable
  4.       RS.  If RS is any single character, that character  separates  records.
  5.       Otherwise,  RS is a regular expression.  Text in the input that matches
  6.       this regular expression separates the record.  However, in  compatibil-
  7.       ity mode, only the first character of its string value is used for sep-
  8.       arating records.  If RS is set to the null  string,  then  records  are
  9.       separated  by blank lines.  When RS is set to the null string, the new-
  10.       line character always acts as a field separator, in addition  to  what-
  11.       ever value FS may have.
复制代码

看这一段
  1. If RS is set to the null  string,  then  records  are
  2.       separated  by blank lines.  When RS is set to the null string, the new-
  3.       line character always acts as a field separator, in addition  to  what-
  4.       ever value FS may have.
  5.       如果RS设置为空串,记录以空行分割。当RS设置为空串,换行符总是扮演分割符的角色,无论FS是什么值。
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2008-05-31 11:24 |只看该作者

回复 #6 action08 的帖子

还是LZ厉害,可以推断出来。我还不知道怎么推断。

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
10 [报告]
发表于 2008-05-31 11:57 |只看该作者
linux已经装好了,但今天不行了,因为还有NV驱动没装.....得升级......(网很卡)


------
欢迎大家继续参与.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP