免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文件内容整理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-20 16:59 |只看该作者 |倒序浏览
场景如下:

文件内容

aaa,bbb,ccc,ddd
111,222,333,444
555,666,777,888
122,133,144,155
eee,fff,ggg,hhh
......(n行)
hhh,ttt,fft,eef

需求后的格式
APPLICATION_LIST;
aaa=111;
bbb=222;
ccc=333;
ddd=444;
END;
APPLICATION_LIST;
aaa=555;
bbb=666;
ccc=777;
ddd=888;
END;
APPLICATION_LIST;
aaa=122;
bbb=133;
ccc=144;
ddd=155;
END;
APPLICATION_LIST;
aaa=eee;
bbb=fff;
ccc=ggg;
ddd=hhh;
END;
...(n行)
APPLICATION_LIST;
aaa=hhh;
bbb=ttt;
ccc=fft;
ddd=eef;
END;

请高手指导!

论坛徽章:
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
2 [报告]
发表于 2016-06-20 17:13 |只看该作者
回复 1# linux_caiji

$ cat FILE
aaa,bbb,ccc,ddd
111,222,333,444
555,666,777,888
122,133,144,155
eee,fff,ggg,hhh
hhh,ttt,fft,eef

$ awk -F, 'NR==1{split($0,a);next}{s="APPLICATION_LIST;\n";for(n=1;n<=NF;++n)s=s a[n]"="$n";\n";print s"END;"}' FILE
APPLICATION_LIST;
aaa=111;
bbb=222;
ccc=333;
ddd=444;
END;
...
APPLICATION_LIST;
aaa=hhh;
bbb=ttt;
ccc=fft;
ddd=eef;
END;


   

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2016-06-20 17:19 |只看该作者
本帖最后由 Herowinter 于 2016-06-20 17:19 编辑

回复 1# linux_caiji

  1. awk -F, -vheader="APPLICATION_LIST;" -vfooter="END;" 'NR==1{for(i=1;i<=NF;i++)a[i]=$i} NR>1{print header;for(i=1;i<=NF;i++)print a[i]"="$i";";print footer}' i
  2. APPLICATION_LIST;
  3. aaa=111;
  4. bbb=222;
  5. ccc=333;
  6. ddd=444;
  7. END;
  8. APPLICATION_LIST;
  9. aaa=555;
  10. bbb=666;
  11. ccc=777;
  12. ddd=888;
  13. END;
  14. APPLICATION_LIST;
  15. aaa=122;
  16. bbb=133;
  17. ccc=144;
  18. ddd=155;
  19. END;
  20. APPLICATION_LIST;
  21. aaa=eee;
  22. bbb=fff;
  23. ccc=ggg;
  24. ddd=hhh;
  25. END;
  26. APPLICATION_LIST;
  27. aaa=hhh;
  28. bbb=ttt;
  29. ccc=fft;
  30. ddd=eef;
  31. END;
复制代码

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
4 [报告]
发表于 2016-06-20 17:52 |只看该作者
  1. awk -vRS= -F'\n|,' '{for(i=5;i<=NF;i++){m=i%4;print (m==1?"APPLICATION_LIST;\n":"")($(m?m:4)"="$i";")(m?"":"\nEND;")}}'
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
5 [报告]
发表于 2016-06-20 18:50 |只看该作者
  1. perl -F/,/ -anle 'if($.==1){@a=@F;next}print"APPLICATION_LIST;";print "$a[$_]=$F[$_];" for 0..$#F;print "END;"' f
复制代码
APPLICATION_LIST;
aaa=111;
bbb=222;
ccc=333;
ddd=444;
END;
APPLICATION_LIST;
aaa=555;
bbb=666;
ccc=777;
ddd=888;
END;
APPLICATION_LIST;
aaa=122;
bbb=133;
ccc=144;
ddd=155;
END;
APPLICATION_LIST;
aaa=eee;
bbb=fff;
ccc=ggg;
ddd=hhh;
END;

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
6 [报告]
发表于 2016-06-20 19:04 |只看该作者
本帖最后由 liion631818 于 2016-06-20 19:04 编辑

回复 1# linux_caiji
  1. awk -v header="APPLICATION_LIST;" -v end="END;" 'NR==1{split($0, keys, ",")}NR>1{print header;split($0, values, ",");for(i in values){print keys[i]"="values[i]";"}; print end;}'
复制代码

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
7 [报告]
发表于 2016-06-21 07:50 |只看该作者
本帖最后由 moperyblue 于 2016-06-22 09:38 编辑
  1. echo 'aaa,bbb,ccc,ddd
  2. 111,222,333,444
  3. 555,666,777,888
  4. 122,133,144,155'|sed -r '/aaa/{h;d};G;s/(.*)\n(.*)/\2,\n\1/;:a;s/([^,]*),(.*)\n([^,]*),?(.*)/\1=\3;\n\2\n\4/;ta;s/(.*)./APPLICATION_LIST;\n\1END;/'
  5. APPLICATION_LIST;
  6. aaa=111;
  7. bbb=222;
  8. ccc=333;
  9. ddd=444;
  10. END;
  11. APPLICATION_LIST;
  12. aaa=555;
  13. bbb=666;
  14. ccc=777;
  15. ddd=888;
  16. END;
  17. APPLICATION_LIST;
  18. aaa=122;
  19. bbb=133;
  20. ccc=144;
  21. ddd=155;
  22. END;
复制代码
  1. awk -F, '/aaa/{split($0,a);next}{print "APPLICATION_LIST;";for(i=1;i<=split($0,b);i++)print a[i]"="b[i]";";print "END;"}'
复制代码

论坛徽章:
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
8 [报告]
发表于 2016-06-21 14:50 |只看该作者
  1. awk 'NR==1{l=split($0,a,",");next}{split($0,b,",");print "APPLICATION_LIST;";for(n=0;n++<l;)print a[n]"="b[n];print "END;"}'
复制代码

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
9 [报告]
发表于 2016-06-21 15:26 |只看该作者
awk -F, '/[a-z]/{a=$1;b=$2;c=$3;d=$4;next}{print "APPLICATION_LIST;\n"  a"="$1";\n"b"="$2FS"\n"c"="$3";\n"d"="$4";\nEND;"}' aa.txt

论坛徽章:
0
10 [报告]
发表于 2016-06-29 16:04 |只看该作者
感谢各位的帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP