免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2218 | 回复: 19

[文本处理] awk文件处理问题 [复制链接]

论坛徽章:
0
发表于 2017-10-18 09:54 |显示全部楼层
以下脚本在某些机器上运行成功,但是有的机器运行失败,运行失败并不是说有报错,而是输出结果不是按照我们预想的输出,而是输出的比较乱,没规律,请大家帮忙看看是哪里的问题?谢谢。
cat $1 | awk '{
if (/^  [^ ]/) {gc=$1}
if ($0 ~ "Rep set:") {rset=$3}
if ($0 ~ "VLX group name:") {gname=$4;print gc,rset,gname}
}'
如果只有如下两个if,那么输出正常
cat $1 | awk '{
if (/^  [^ ]/) {gc=$1}
if ($0 ~ "Rep set:") {rset=$3;print gc,rset}
}'

但是如果是3个if的话则输出不正常,不知道什么问题?

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-10-18 10:27 |显示全部楼层
本帖最后由 wh7211 于 2017-10-19 10:55 编辑

源文件的内容和想要输出的结果都贴一下吧。

论坛徽章:
0
发表于 2017-10-18 11:20 |显示全部楼层
回复 2# wh7211 要处理的文本内容说明:
gc:TestA_GC
Rep set:RSet42,RSet43,RSet44,RSet45
VLX group name:Test_GC_Local
如果是如下两个if的脚本:cat $1 | awk '{
if (/^  [^ ]/) {gc=$1}
if ($0 ~ "Rep set:") {rset=$3;print gc,rset}
}'
输出结果为:


TestA_GC RSet42
TestA_GC RSet43
TestA_GC RSet44
TestA_GC RSet45

如果是3个if都有的情况,脚本如下:
cat $1 | awk '{
if (/^  [^ ]/) {gc=$1}
if ($0 ~ "Rep set:") {rset=$3}
if ($0 ~ "VLX group name:") {gname=$4;print gc,rset,gname}
}'
输出结果为:
Test_GC_LocalRSet42
Test_GC_LocalRSet43
Test_GC_LocalRSet44
Test_GC_LocalRSet45


但是预期的结果应该是如下输出:
TestA_GC RSet42 Test_GC_Local
TestA_GC RSet43 Test_GC_Local
TestA_GC RSet44 Test_GC_Local
TestA_GC RSet45 Test_GC_Local



请帮忙看看问题所在?谢谢。

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-10-18 12:01 |显示全部楼层
回复 3# heiheihacker


文件第一行 gc:TestA_GC 中,gc后面是个中文冒号,我改成了英文冒号,以下供你参考:
文件1内容如下:
gc:TestA_GC
Rep set:RSet42,RSet43,RSet44,RSet45
VLX group name:Test_GC_Local

  1. awk -F"[:,]" '/gc:/{gc=$2}/Rep set:/{for(i=2;i<=NF;i++){a[i]=$i}}/VLX group name:/{gname=$2}END{for(i in a){print gc,a[i],gname}}' 1
复制代码

输出:
TestA_GC RSet42 Test_GC_Local
TestA_GC RSet43 Test_GC_Local
TestA_GC RSet44 Test_GC_Local
TestA_GC RSet45 Test_GC_Local

求职 : 数据库管理员
论坛徽章:
0
发表于 2017-10-18 13:03 |显示全部楼层
我很好奇你提供的命令是怎么输出东西来的

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-10-18 13:09 |显示全部楼层

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2017-10-18 13:48 |显示全部楼层
  1. [root@module myredis]# cat aa.log
  2. gc:TestA_GC
  3. Rep set:RSet42,RSet43,RSet44,RSet45
  4. VLX group name:Test_GC_Local
  5. [root@module myredis]# awk -F '[:|:]+' '$1=="gc"{gc=$2}$1~"Rep set"{gsub(",","\n"gc" ",$2);rset=$2;print gc,$2}' aa.log
  6. TestA_GC RSet42
  7. TestA_GC RSet43
  8. TestA_GC RSet44
  9. TestA_GC RSet45
  10. [root@module myredis]# awk -F '[:|:]+' '$1=="gc"{gc=$2}$1~"Rep set"{rset=$2}$1~"VLX group name"{vlx=$2}END{gsub(","," "vlx"\n"gc" ",rset);print gc,rset,vlx}' aa.log
  11. TestA_GC RSet42 Test_GC_Local
  12. TestA_GC RSet43 Test_GC_Local
  13. TestA_GC RSet44 Test_GC_Local
  14. TestA_GC RSet45 Test_GC_Local
复制代码

论坛徽章:
0
发表于 2017-10-18 15:09 |显示全部楼层
本帖最后由 heiheihacker 于 2017-10-18 15:10 编辑

回复 4# wh7211

非常感谢回复,文本内容这块可能我没说清楚,刚才我只是提供了相关的关键字,下面是截取原日志文件中的一小部分,其它部分基本是类似的内容,请帮忙再看一下,谢谢了!Group:
  TestA_GC:
    Copy:
      CA_Local:
        Rep volumes:
          Rep set: RSet42
          Rep size: 100.00 GB
          VLX group name: Test_GC_Local
          VLX locality type: Local
          SAN Info:
            Type: VLX
            Product: VLX
            Model:Unspecified
            Size: 100.00 GB

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-10-18 15:46 |显示全部楼层
回复 8# heiheihacker


对于这个日志,你想要输出的结果是什么?

论坛徽章:
0
发表于 2017-10-18 15:54 |显示全部楼层
本帖最后由 heiheihacker 于 2017-10-18 15:55 编辑

回复 9# wh7211

想要的输出结果还是刚才说的:
TestA_GC RSet42 Test_GC_Local
TestA_GC RSet43 Test_GC_Local
TestA_GC RSet44 Test_GC_Local
TestA_GC RSet45 Test_GC_Local


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP