免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何使用shell建立循环,截取相关数据。 [复制链接]

论坛徽章:
0
发表于 2017-12-04 13:49 |显示全部楼层
1.txt里包含如下数据:

strKeys: 1.6|Play|UP|792001041705594|792001|019|9
strSelection: 1|1|10
strErrorNoInner: 1,1001

strKeys: 1.6|Play|UP|792001041705594|792001|019|9
strSelection: 1|1|10
strErrorNoInner: 1,2001

strKeys: 1.6|Play|UP|792001041705594|792001|019|9
strSelection: 1|1|10
strErrorNoInner: 1,3001

strKeys: 1.6|Play|UP|792001041705594|792001|019|9
strSelection: 1|1|10
strErrorNoInner: 1,4001



strKeys: 1.6|Play|UP|792001041705594|792001|019|9
strSelection: 1|1|10
strErrorNoInner: 1,9001

使用 awk -F"[|,]" '/strKeys/{a=$5}/strError/{b=$2}END{print a,b}' 1.txt 只可以截取第一行的数据,类似如下:
792001 1001

如何使用shell建立循环,截取到所有信息呢?

论坛徽章:
0
发表于 2017-12-04 15:59 |显示全部楼层
  1. awk -vRS='\n\n' -F'[|,]' '{print $5,$10}' a
  2. 792001 1001
  3. 792001 2001
  4. 792001 3001
  5. 792001 4001
复制代码

论坛徽章:
0
发表于 2017-12-04 17:18 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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-12-04 19:22 |显示全部楼层
回复 1# samlin7683


  1. awk -F"[,|]" '/strKeys/{a=$5}/strError/{b=$2}{if(a&&b){print a,b;a=b=""}}' 1.txt
复制代码

论坛徽章:
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
发表于 2017-12-04 20:17 |显示全部楼层
回复 3# 本友会机友会摄友会

>> ...特别简单...

别在这丢人现眼
2楼4楼都是直接给代码...  

论坛徽章:
0
发表于 2017-12-06 16:58 |显示全部楼层
#!/bin/bash
while read a b                                                                                                                                                                                 
do
    case $a in
    strKeys*)
        echo $b|awk -F"|" '{printf $5"\t"}'
        ;;
    strErrorNoInner*)
        echo $b|awk -F"," '{print $2}'
        ;;
    *)
        ;;
    esac
done < file.txt

论坛徽章:
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
发表于 2017-12-07 11:16 |显示全部楼层
回复 1# samlin7683

$ awk -F': *' 'function g(s,c,n){split($2,a,c);return a[n]}/strKeys:/{k=g($2,"|",5)}/strErrorNoInner:/{e=g($2,",",2);print k,e}' 1.txt
792001 1001
792001 2001
792001 3001
792001 4001
792001 9001

论坛徽章:
0
发表于 2017-12-08 14:26 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-12-10 16:04 |显示全部楼层
回复 7# jason680

function g(s,c,n)
可否只是一下

论坛徽章:
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
发表于 2017-12-10 22:54 |显示全部楼层
回复 9# 1cpuer

strKeys: 1.6|Play|UP|792001041705594|792001|019|9
strSelection: 1|1|10
strErrorNoInner: 1,1001


g($2,"|",5)



g($2,",",2)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP