免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell生成固定数字格式及多个文件 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-06-25 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-18 14:01 |只看该作者 |倒序浏览
本帖最后由 97251230 于 2016-05-18 14:02 编辑

此贴为上午另外一帖的更正贴,上午贴中想的太简单,以至于在无法实现。给各位朋友带来麻烦,抱歉。
想获得1-20之间的数据(是1为开始),每行一条数据,但是要分成每个文件5条数据。如果就是以id为值的话,实现的效果如下。
txt1.txt

  1. 文本开始1:
  2. 文本开始2:
  3. 序列1的行
  4. 序列2的行
  5. 序列3的行
  6. 序列4的行
  7. 序列5的行
  8. 文本结尾1。
  9. 文本结尾2。
复制代码
txt2.txt

  1. 文本开始1:
  2. 文本开始2:
  3. 序列6的行
  4. 序列7的行
  5. 序列8的行
  6. 序列9的行
  7. 序列10的行
  8. 文本结尾1。
  9. 文本结尾2。
复制代码
txt3.txt

  1. 文本开始1:
  2. 文本开始2:
  3. 序列11的行
  4. 序列12的行
  5. 序列13的行
  6. 序列14的行
  7. 序列15的行
  8. 文本结尾1。
  9. 文本结尾2。
复制代码
txt4.txt

  1. 文本开始1:
  2. 文本开始2:
  3. 序列16的行
  4. 序列17的行
  5. 序列18的行
  6. 序列19的行
  7. 序列20的行
  8. 文本结尾1。
  9. 文本结尾2。
复制代码
提示:
1、“文本开始1:”、“文本开始2:”、“文本结尾1。”、“文本结尾2。”是在每个文件开始和结尾需要出现一次的数据。也就是在每个文件的头部和尾部可能是多行自定义文本。
2、“序列”和“的行”是在每行需要出现的数据。
3、其中只有一个id值在变化。

语文是体育老师教的,希望各位能看懂。

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之八一
日期:2016-05-18 15:38:22
2 [报告]
发表于 2016-05-18 14:27 |只看该作者
  1. #!/bin/bash
  2. for i in {1..20}
  3. do
  4. if [ $(($i%5)) == 1 ];then
  5. cat begin.txt >> txt$((($i-1)/5+1)).txt
  6. fi
  7. echo "序列$i的行">>txt$((($i-1)/5+1)).txt
  8. if [ $(($i%5)) == 0 ];then
  9. cat end.txt >> txt$((($i-1)/5+1)).txt
  10. fi
  11. done
复制代码
1-20可以自己随便改,“序列的行”你自己改成需要的,自定义的头部放到begin.txt,自定义的尾部放到end.txt,随便放多少行。
每个里面放5个也可以随便改成你要的几个。

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之八一
日期:2016-05-18 15:38:22
3 [报告]
发表于 2016-05-18 14:27 |只看该作者
  1. #!/bin/bash
  2. for i in {1..20}
  3. do
  4. if [ $(($i%5)) == 1 ];then
  5. cat begin.txt >> txt$((($i-1)/5+1)).txt
  6. fi
  7. echo "序列$i的行">>txt$((($i-1)/5+1)).txt
  8. if [ $(($i%5)) == 0 ];then
  9. cat end.txt >> txt$((($i-1)/5+1)).txt
  10. fi
  11. done
复制代码
1-20可以自己随便改,“序列的行”你自己改成需要的,自定义的头部放到begin.txt,自定义的尾部放到end.txt,随便放多少行。
每个里面放5个也可以随便改成你要的几个。

论坛徽章:
768
金牛座
日期: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
4 [报告]
发表于 2016-05-18 14:28 |只看该作者
回复 1# 97251230

  1. seq 20|awk 'NR%5==1{f="txt"++n".txt";print "文本开始1:\n文本开始2:">f} {print "序列"$0"的行">f} NR%5==0{print "文本结尾1。\n文本结尾2。">f}'
复制代码

评分

参与人数 1信誉积分 +5 收起 理由
97251230 + 5 很给力!很给力!很给力!重要的事情说三遍!

查看全部评分

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之八一
日期:2016-05-18 15:38:22
5 [报告]
发表于 2016-05-18 14:28 |只看该作者
浏览器卡了发重了,好像不能删

论坛徽章:
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
6 [报告]
发表于 2016-05-18 14:31 |只看该作者
本帖最后由 jason680 于 2016-05-18 14:35 编辑

回复 1# 97251230

$ seq 20 | awk -vn=5 -vs='文本开始1:\n文本开始2:' -ve='文本结尾1。\n文本结尾2 。' '{if(NR%n==1){F="txt"++c".txt";print "FILE"c":"F;print s>F};print >F;if(NR%n==0)print e>F}'
FILE1:txt1.txt
FILE2:txt2.txt
FILE3:txt3.txt
FILE4:txt4.txt

$ grep . txt[1234].txt
txt1.txt:文本开始1:
txt1.txt:文本开始2:

txt1.txt:1
txt1.txt:2
txt1.txt:3
txt1.txt:4
txt1.txt:5

txt1.txt:文本结尾1。
txt1.txt:文本结尾2。

txt2.txt:文本开始1:
txt2.txt:文本开始2:
txt2.txt:6
txt2.txt:7
txt2.txt:8
txt2.txt:9
txt2.txt:10
txt2.txt:文本结尾1。
txt2.txt:文本结尾2。
txt3.txt:文本开始1:
txt3.txt:文本开始2:
txt3.txt:11
txt3.txt:12
txt3.txt:13
txt3.txt:14
txt3.txt:15
txt3.txt:文本结尾1。
txt3.txt:文本结尾2。
txt4.txt:文本开始1:
txt4.txt:文本开始2:
txt4.txt:16
txt4.txt:17
txt4.txt:18
txt4.txt:19
txt4.txt:20
txt4.txt:文本结尾1。
txt4.txt:文本结尾2。

   

评分

参与人数 1信誉积分 +5 收起 理由
97251230 + 5 赞一个!

查看全部评分

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-06-25 22:20:00
7 [报告]
发表于 2016-05-18 15:06 |只看该作者
本帖最后由 97251230 于 2016-05-18 15:07 编辑

回复 2# 287380917


    好像报错了,你那里没错吗。
  1. $ sh ceshi.sh
  2. : No such file or directory
  3. ceshi.sh:行3: 未预期的符号 `do\r'' 附近有语法错误
  4. 'eshi.sh:行3: `do
复制代码

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之八一
日期:2016-05-18 15:38:22
8 [报告]
发表于 2016-05-18 15:15 |只看该作者
本帖最后由 287380917 于 2016-05-18 15:32 编辑

回复 7# 97251230
\r好像是word的回车,我这没问题的,估计论坛给转了格式了,你给转成linux的或者自己敲一下。
cat -A ceshi.sh |sed  's:/r::g;s:\$::g' > new.sh


   

求职 : 技术支持/维
论坛徽章:
0
9 [报告]
发表于 2016-05-18 16:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP