免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell 判断
最近访问板块 发新帖
楼主: aaaa_123
打印 上一主题 下一主题

[文本处理] 判断 [复制链接]

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
21 [报告]
发表于 2019-04-08 11:46 |只看该作者
楼主 ,你这行样本
  1. 2016.1.30' data 'data''data'33874''9
复制代码

里面都是单引号啊,你是把双引号 笔误写错了?还是就要求这样,以一个单引号为分隔,不以两个连续的单引号分隔?这差别可大了去了...

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
22 [报告]
发表于 2019-04-08 18:25 |只看该作者
cfwyy 发表于 2019-04-08 11:46
楼主 ,你这行样本里面都是单引号啊,你是把双引号 笔误写错了?还是就要求这样,以一个单引号为分隔,不以 ...

回复 12# cfwyy
hello,
是以单引号分列,   有些是2个连续单引号    不是双引号  判断要匹配分隔符是否在最后一列 则打印 print $NF

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
23 [报告]
发表于 2019-04-09 09:44 |只看该作者
回复 13# aaaa_123

我觉得难点就是 区分一个单引号,和两个连续的单引号,3楼的正则的写法单引号的匹配会有些问题(前后一个字符也会匹配进去做为FS)另外好像 awk 不支持 正则的断言,FS用正则表示单个引号,连续的两个单引号就很难排除,参考了9楼PS的方法,先用替换函数把连续的两个单引替换掉,再分割,再替换回来。
  1. awk -F'\\|\\||//' -v sep1="''" -v sep2="'" -v tmp="@" 'NF>1{print $NF} /\047/{gsub(sep1,tmp);N=split($0,a,sep2);sub(tmp,sep1,a[N]);print a[N]}' file.txt
  2. 8080
  3. 1|389
  4. 33874''9
  5. 8/8080
  6. 1389
复制代码


论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
24 [报告]
发表于 2019-04-10 11:08 |只看该作者
回复 14# cfwyy

思路清晰, 代码也风骚   Thanks

论坛徽章:
0
25 [报告]
发表于 2019-04-21 15:42 |只看该作者
  1. cat file | grep -E "\|\||//|[^']'[^']" |  sed 's/'\'''\''\+/,/g' | awk -F"\|\||//|'" '{print $NF}' | sed 's/,/'\'''\''/g'
  2. 8080
  3. 1|389
  4. 33874''9
  5. 8/8080
  6. 1389
复制代码

这里主要是''引号和'的问题,可以在awk处理之前用sed转为,然后再进行处理。
用sed处理''也比较麻烦,需要再两个单引号里进行转义,即'\'',这才能算一个引号。

论坛徽章:
0
26 [报告]
发表于 2019-04-30 07:36 |只看该作者
gawk "{gsub(/\/\/|data'|\|\|/,""" """);print $NF}" 原文.txt|gawk "/./"|gawk "!/-/">h.txt

h.txt:
8080
1|389
33874''9
8/8080
1389

论坛徽章:
0
27 [报告]
发表于 2019-04-30 07:37 |只看该作者
gawk "{gsub(/\/\/|data'|\|\|/,""" """);print $NF}" 原文.txt|gawk "/./"|gawk "!/-/">h.txt

h.txt:
8080
1|389
33874''9
8/8080
1389

论坛徽章:
0
28 [报告]
发表于 2019-04-30 07:39 |只看该作者
gawk "{gsub(/\/\/|data'|\|\|/,""" """);print $NF}" 原文.txt|gawk "/./"|gawk "!/-/">h.txt

h.txt:
8080
1|389
33874''9
8/8080
1389

论坛徽章:
0
29 [报告]
发表于 2019-04-30 07:39 |只看该作者
回复 1# aaaa_123

gawk "{gsub(/\/\/|data'|\|\|/,""" """);print $NF}" 原文.txt|gawk "/./"|gawk "!/-/">h.txt

h.txt:
8080
1|389
33874''9
8/8080
1389

论坛徽章:
0
30 [报告]
发表于 2019-04-30 07:40 |只看该作者
回复 2# aaaa_123

gawk "{gsub(/\/\/|data'|\|\|/,""" """);print $NF}" 原文.txt|gawk "/./"|gawk "!/-/">h.txt

h.txt:
8080
1|389
33874''9
8/8080
1389
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP