免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教个管道输入处理的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-31 10:12 |只看该作者 |倒序浏览
现在有一个管道输入,比如“‘aaa,bbbb,ccc,ddd' '111,22,3333,4444' '64,128,256,64'  aaa bb cccc dddd , aa bb ccc , aaa bbb , aa bb cc”
一共有4个段,前三个段中每个字段由,号分隔,外面有单引号’‘包括。字段的数量是相同的,最后一个段中的每个字段可能不止一个单词,但是字段间也是,号分隔,外面没有单引号

现在想要的结果是这样:
比如:A1=aaa      B1=111       C1=64      D1=aaa bb cccc dddd
        A2=bbbb    B2=22         C2=128    D2=aa bb ccc
        A3=ccc       B3=3333     C3=256     D3=aaa bbb
        A4=ddd      B4=4444     C4=64      D4=aa bb cc

不知道我表述清楚没有,就是假设输入的是4大段,其中每大段中的小字段的数量是一样的,比如上例中有4个小字段,小字段间用逗号,分隔,如何将他们分别输出到变量中使用?

论坛徽章:
0
2 [报告]
发表于 2013-12-31 10:14 |只看该作者
使用Ksh处理上面的问题,多谢

论坛徽章:
1
未羊
日期:2014-01-02 10:31:18
3 [报告]
发表于 2013-12-31 11:53 |只看该作者
本帖最后由 huzikan 于 2013-12-31 11:55 编辑
  1. awk -F"'" '{split($2,A,",");split($4,B,",");split($6,C,",");split($7,D,",");for(i=1;i<=4;i++) print "A"i"="A[i]"\tB"i"="B[i]"\tC"i"="C[i]"\tD"i"="D[i]}'|sed 's/=[ ]*/=/g'
复制代码
我也是才学shell,这个能够实现你要的效果,但是代码确实丑了点。等待大神给你更好的答案吧~~~
顺便说一下,你字符串开头的那个也是单引号而非反引号吧?我是当做单引号处理的


论坛徽章:
0
4 [报告]
发表于 2013-12-31 14:47 |只看该作者
呵呵,谢谢楼上,这个只能实现例子中的每段是4个小段的吧,如果里面的小段不是固定的呢?

论坛徽章:
0
5 [报告]
发表于 2013-12-31 14:53 |只看该作者
前三段都是单引号包裹,里面小段用逗号隔开,最后一个段没有单引号,每小段也是逗号隔开,和前三段区别是前面的每小段就是一个单词,而最后一段的可能有多个单词,中间是空格
要是在数据库中就好办了,一共若干列,取出一行一行的记录就行了,但是这是管道输入,全部在一行

论坛徽章:
1
未羊
日期:2014-01-02 10:31:18
6 [报告]
发表于 2014-01-01 20:43 |只看该作者
小段不是固定的是指共四个大段中每个大段中用逗号分隔的小段个数不固定吗?假如不固定是指所有大段中的小段不一定是四的话,只需要把代码的循环次数改一下就行了,假如你是说第一大段是4,而第二大段又变成了3,而第三大段是5的话那确实不能处理。因为你的输出格式限制了这种输出实现的可能性。
回复 4# 杀无赦


   

论坛徽章:
0
7 [报告]
发表于 2014-01-02 07:52 |只看该作者
每个大段内的小段的数量是相同的,但不一定是4,另外为了简单处理些,最后那个大段也用单引号包括起来。这样循环数怎么确定呢?是不是还要判断一下大段内小段的个数?如何做呢?谢谢huzikan的大力支持

论坛徽章:
0
8 [报告]
发表于 2014-01-02 08:08 |只看该作者
为什么是$2、$4、$6、$7呢?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2014-01-02 08:22 |只看该作者
回复 8# 杀无赦


    以单引号为列分隔符,自己数出来的。

论坛徽章:
0
10 [报告]
发表于 2014-01-02 09:09 |只看该作者
这样做显然不行啊,大段里面的小段的数量不一定啊,怎么能固定呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP