免费注册 查看新帖 |

Chinaunix

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

关于格式的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-18 20:04 |只看该作者 |倒序浏览
有这样一个文件file1,是个不定的文件:
1
2664
3166
3445
3731
3868
4002
4043
4227
4325
5255
5383
5491
5542
5687
5817
.......
.......
怎样把它弄为
file2
1
2664-1

file3
2664
3166-1

file4
3166
3445-1
.......
自动生成n个文件呢?

论坛徽章:
0
2 [报告]
发表于 2008-08-18 20:34 |只看该作者
try
awk 'NR==1{print $0 >"file2";next;};{print $0 "-1" >"file" NR-1;print $0 >"file" NR}' urfile

论坛徽章:
0
3 [报告]
发表于 2008-08-18 21:53 |只看该作者
also try

  1. sed '1{x;s/.*/2/;x};H;x;h;s/^\([0-9]*\)\n\(.*\)$/echo "\2-1" >file\1/e;x;s/^\([0-9]*\)\n.*\n\([^\n]*\)$/echo "$(expr \1 + 1)\n\2"/e;x;' urfile
复制代码

也就是

  1. sed '1{x;s/.*/2/;x};
  2.      H;x;h;
  3.      s/^\([0-9]*\)\n\(.*\)$/echo "\2-1" >file\1/e;
  4.      x;
  5.      s/^\([0-9]*\)\n.*\(\n[^\n]*\)$/echo "$(expr \1 + 1)\2"/e;
  6.      x;' urfile
复制代码

[ 本帖最后由 爱知 于 2008-8-18 23:00 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2008-08-18 22:07 |只看该作者
原帖由 爱知 于 2008-8-18 20:34 发表
try
awk 'NR==1{print $0 >"file2";next;};{print $0 "-1" >"file" NR-1;print $0 >"file" NR}' urfile


应该是:
print $0 "-1" >"file" NR;print $0 >"file" NR+1

论坛徽章:
0
5 [报告]
发表于 2008-08-18 22:12 |只看该作者

回复 #4 ly5066113 的帖子

处理第一行时,不知会不会覆盖源文件(file1)
我的疑惑是在第一行和最后一行,将多产生两个文件

[ 本帖最后由 爱知 于 2008-8-18 22:15 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2008-08-18 22:30 |只看该作者
原帖由 爱知 于 2008-8-18 22:12 发表
处理第一行时,不知会不会覆盖源文件(file1)
我的疑惑是在第一行和最后一行,将多产生两个文件


'NR==1{print $0 >"file2";next;}

哪里有 file1 ?

论坛徽章:
0
7 [报告]
发表于 2008-08-18 22:36 |只看该作者

回复 #6 ly5066113 的帖子

一楼源文件

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2008-08-18 22:38 |只看该作者
原帖由 爱知 于 2008-8-18 22:36 发表
一楼源文件


你没明白我的意思,awk代码里没有对 file1 做 写(>) 的操作,都是从 file2 开始的。

论坛徽章:
0
9 [报告]
发表于 2008-08-18 22:52 |只看该作者
奥,是我错了,谢谢ly5066113兄提醒
应改为
awk 'NR==1{print $0 >"file2";next;};{print $0 "-1" >"file" NR;print $0 >"file" NR+1}' urfile
不过产生的文件中多了一个,底数最大的
再删除之

[ 本帖最后由 爱知 于 2008-8-18 22:54 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-08-18 23:32 |只看该作者
高手多啊。看的头晕。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP