免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: su8610
打印 上一主题 下一主题

[文本处理] 关于IFS [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-03-24 12:48 |只看该作者
回复 9# su8610

额,我这个就是随便弄的,不严谨的,其实有很大问题的,比如你连续几行double-quote都很多而且是单数,可能就会有问题,
想法比较简单,就是每次计算当前行里的double-quote的数量并和之前模后值相加再取模,如果还是单数,就不输出,把当前行保存起来,直到为双数的时候再判断行尾是不是here,如果是的话就把之前保存的加当前行一起输出出来,然后把记录的字符串清空。


   

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
12 [报告]
发表于 2014-03-24 13:03 |只看该作者
回复 5# su8610


try:
  1. awk -F, '{while(NF<3){getline v;$0=$0"\n"v}}/,here$/' file
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
13 [报告]
发表于 2014-03-24 13:10 |只看该作者
本帖最后由 rdcwayx 于 2014-03-24 13:11 编辑

看到楼主这个例子后,原本考虑用gawk的新功能 FPAT 来处理,但是其不能处理双引号里含换行符的情况。
  1. NOTE: Some programs export CSV data that contains embedded newlines between the double quotes. gawk provides no way to deal with this. Since there is no formal specification for CSV data, there isn't much more to be done; the FPAT mechanism provides an elegant solution for the majority of cases, and the gawk maintainer is satisfied with that.
复制代码
我在自己的原文里做了更新: http://bbs.chinaunix.net/forum.p ... ;extra=#pid24123612

论坛徽章:
3
水瓶座
日期:2014-03-25 17:08:042015亚冠之塔什干棉农
日期:2015-08-10 10:45:122015亚冠之萨济拖拉机
日期:2015-08-13 16:05:24
14 [报告]
发表于 2014-03-24 13:25 |只看该作者
回复 11# runintostar


    谢谢你,我也想判断是否成对的双引号,但是不知道怎么判断。不过你这个确实比较长啊,anyway, 谢谢你

论坛徽章:
3
水瓶座
日期:2014-03-25 17:08:042015亚冠之塔什干棉农
日期:2015-08-10 10:45:122015亚冠之萨济拖拉机
日期:2015-08-13 16:05:24
15 [报告]
发表于 2014-03-24 13:29 |只看该作者
回复 12# ly5066113


    谢谢ly兄解答, 这个确实比较简洁,但是如果我的文本修改了就不行了,比如说这样:

a,"testline,ss
newline",here

这样就打印不出来了,我以为NF《NF可以,结果也只是打印出来下面的一段。或者里面有多个换行

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
16 [报告]
发表于 2014-03-24 13:50 |只看该作者
本帖最后由 jason680 于 2014-03-24 14:29 编辑

回复 1# su8610

How about this way

# cat FILE
a,"testline                  # c = 0, NF =2(oven) , combine data to d, and assign NF to c
newline",here             # c = 1, NF =2(oven) , check here in tail
b,test2,not-here         # c = 0, NF =1(odd), check here in tail
c,aas,here                 # c = 0, NF =1(odd), check here in tail
b,sdaasd,here           # c = 0, NF =1(odd), check here in tail
e,teste,here-no         # c = 0, NF =1(odd), check here in tail

# awk -F'"' '{d=d==""?$0:d"\n"$0;if((NF+c)%2==0){c=1;next};if(/,here$/)print d;d=c=""}' FILE
a,"testline
newline",here
c,aas,here
b,sdaasd,here

论坛徽章:
36
摩羯座
日期:2013-09-23 16:37:312015年亚洲杯之沙特阿拉伯
日期:2015-04-14 09:10:172015亚冠之柏太阳神
日期:2015-06-25 08:48:212015亚冠之武里南联
日期:2015-07-28 09:01:082015亚冠之莱赫维亚
日期:2015-07-28 15:44:172015亚冠之柏斯波利斯
日期:2015-09-06 14:08:52白银圣斗士
日期:2015-11-25 17:06:2815-16赛季CBA联赛之吉林
日期:2015-12-09 16:59:072016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之辽宁
日期:2016-04-14 09:29:04luobin
日期:2016-06-17 17:46:3615-16赛季CBA联赛之天津
日期:2016-08-16 14:11:01
17 [报告]
发表于 2014-03-24 14:25 |只看该作者
  1. [root@dbserver ~]# awk '$0~/"/{getline b;$0=$0"\n"b}/here$/' a.txt
  2. a,"testline
  3. newline",here
  4. b,test2,not-here
  5. c,aas,here
  6. b,sdaasd,here
  7. a,"testline,ss
  8. newline",here
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP