免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求一个文本分割的shell脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-04 01:54 |只看该作者 |倒序浏览
各位shell的专家们,大家好!

因为最近数据有点多,想用shell的脚本来把一个大的txt文档分割成若干个小的txt文档,如有赐教,不胜感激!

具体是,我有很多个名称为A的txt文档,A.txt有180行,每一行有3列数据,比如.....
116.761        2        1
128.755        2        1
138.763        2        1
178.762        2        1
190.771        2        1
226.75        2        1
304.764        2        1
360.759        2        1
374.77        2        1
404.761        2        1
45.937        2        1
73.926        2        1
109.939        2        1
117.929        2        1
167.936        2        1
189.937        2        1
203.932        2        1
281.945        2        1
343.945        2        1
379.941        2        1
...........
...........
我想做的是,将这个文档分成18个小的txt文档,每个小txt文档按顺序取10行.并且,前面6个文档名字分别命名为A_ag_run1 A_ag_run2...... A_ag_run6. 中间6个文档命名为 A_al_run1 A_al_run2...... A_al_run6,最后6个文档名字命名为A_an_run1 A_an_run2...... A_an_run6。


请教一下各位shell的高手,这个shell的脚本应该怎么写?多谢了!

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-08-04 02:34 |只看该作者
回复 1# psychymluo
  1.   awk 'BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a=1;b++}}{print >"A_a"c[b]"_run"a}' urfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-08-04 05:09 |只看该作者
谢谢你快速的帮助!非常感谢!但是我把 awk 'BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a=1;b++}}{print >"A_a"c"_run"a}' s002.txt 运行之后,出现了这个错误,

awk: syntax error at source line 1
context is
        BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a=1;b++}}{print >>>  >"A_a"c <<< "_run"a}
awk: illegal statement at source line 1

能不能麻烦你再帮忙看一下?

谢谢了!


回复 2# 关阴月飞


   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
4 [报告]
发表于 2013-08-04 13:03 |只看该作者
本帖最后由 关阴月飞 于 2013-08-04 13:06 编辑
psychymluo 发表于 2013-08-04 05:09
谢谢你快速的帮助!非常感谢!但是我把 awk 'BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a ...



"{print >"A_a"c"_run"a}' s002.txt 运行之后,出现了这个错误,"


这里的c是个数组,引用的时候少了下标,应该是
  1. c[b]
复制代码

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
5 [报告]
发表于 2013-08-04 15:24 |只看该作者
本帖最后由 reyleon 于 2013-08-04 15:29 编辑
  1. awk 'BEGIN{a[1]="A_ag_run";a[2]="A_al_run";a[3]="A_an_run"}NR%10==1{i++;if(i%6==1){i=1;j++}}{print >a[j] i}'
复制代码
@关阴月飞  这问题我纠结了一下午,一直纠结在 NR%10==0 和 i%6==0 ,结果还是没搞出来   

论坛徽章:
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
6 [报告]
发表于 2013-08-04 18:04 |只看该作者
本帖最后由 rdcwayx 于 2013-08-04 20:09 编辑
关阴月飞 发表于 2013-08-04 04:34
回复 1# psychymluo
  1. BEGIN{c[1]="g";c[2]="l";c[3]="n"}
  2. to
  3. BEGIN{split("g,l,n",c,",")}
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-08-04 23:26 |只看该作者
本帖最后由 psychymluo 于 2013-08-04 23:48 编辑

感谢你们 ( 关阴月飞  rdcwayx reyleon ) 无私的帮助!



我把  关阴月飞 提供code修改了之后,运行

awk 'BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a=1;b++}}{print >"A_a"c[b1]"_run"a}' s002.txt,

不好意思,不知道怎么回事,我编辑帖子的时候是“({print >"A_a"c"_run"a}')” 是有"c[b1]"的,但是我发布出来的时候就自动没有了。其实我第一次和第二次运行的时候就有"c[b1]",由于b论坛似乎会自动省略,我在帖子里只好用c[b1]代替了。


还是出现同样的错误:


awk: syntax error at source line 1
context is
        BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a=1;b++}}{print >>>  >"A_a"c <<< "_run"a}
awk: illegal statement at source line 1

由于我还是shell的新手,真心不知道怎么动,手动起来又很麻烦,所以还想麻烦你们帮忙看一下,我把其中一个数据上传上来,可以尝试运行一下!

再次谢谢了!

祝愿好心人有好报!



s002.zip (1.2 KB, 下载次数: 10)

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
8 [报告]
发表于 2013-08-04 23:51 |只看该作者
  1. awk 'BEGIN{a[1]="A_ag_run";a[2]="A_al_run";a[3]="A_an_run"}NR%10==1{i++;if(i%6==1){i=1;j++}}{print >a[j] i}' s002.txt
复制代码
这个没问题呀,你直接复制代码块中的代码执行就好了

最近在学python,写了个python的,你也可以试试
  1. #!/usr/bin/python

  2. f = open('s002.txt')
  3. names = ['','A_ag_run','A_al_run','A_an_run']

  4. fn = 0
  5. nn = 0
  6. ln = 0

  7. for line in f.readlines():
  8.         ln += 1
  9.         if ln%10 == 1:
  10.                 fn += 1
  11.                 if fn%6 == 1:
  12.                         fn = 1
  13.                         nn += 1
  14.         d = open(names[nn]+str(fn),'a')
  15.         d.write(line)
复制代码

论坛徽章:
0
9 [报告]
发表于 2013-08-05 00:20 |只看该作者
不好意思啊, 我是直接复制你的code在terminal里面回车,还是出现这个错误,不知道怎么回事?你那里可以运行吗?好奇怪!

还是很感谢了!

awk: syntax error at source line 1
context is
        BEGIN{a[1]="A_ag_run";a[2]="A_al_run";a[3]="A_an_run"}NR%10==1{i++;if(i%6==1){i=1;j++}}{print >a[j] >>>  i <<< }
awk: illegal statement at source line 1


回复 8# reyleon


   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
10 [报告]
发表于 2013-08-05 09:22 |只看该作者
回复 7# psychymluo

话说lz是在什么环境下做的测试?
  1. [root@ test]# wc -l file
  2. 180 file
  3. [root@ test]#   awk 'BEGIN{c[1]="g";c[2]="l";c[3]="n"}NR%10==1{++a;if(a%6==1){a=1;b++}}{print >"A_a"c[b]"_run"a}' file
  4. [root@ test]# ls -1
  5. A_ag_run1
  6. A_ag_run2
  7. A_ag_run3
  8. A_ag_run4
  9. A_ag_run5
  10. A_ag_run6
  11. A_al_run1
  12. A_al_run2
  13. A_al_run3
  14. A_al_run4
  15. A_al_run5
  16. A_al_run6
  17. A_an_run1
  18. A_an_run2
  19. A_an_run3
  20. A_an_run4
  21. A_an_run5
  22. A_an_run6
  23. file
  24. [root@ test]# wc A_a* file  -l
  25.   10 A_ag_run1
  26.   10 A_ag_run2
  27.   10 A_ag_run3
  28.   10 A_ag_run4
  29.   10 A_ag_run5
  30.   10 A_ag_run6
  31.   10 A_al_run1
  32.   10 A_al_run2
  33.   10 A_al_run3
  34.   10 A_al_run4
  35.   10 A_al_run5
  36.   10 A_al_run6
  37.   10 A_an_run1
  38.   10 A_an_run2
  39.   10 A_an_run3
  40.   10 A_an_run4
  41.   10 A_an_run5
  42.   10 A_an_run6
  43. 180 file
  44. 360 总计
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP