Chinaunix
标题:
请教文件分割的问题
[打印本页]
作者:
o枫叶o飘零
时间:
2014-07-08 20:24
标题:
请教文件分割的问题
目前有一个文件aaa 行数未知
要求是每50W行进行分割 分割后的文件名为 a01.txt a02.txt a03.txt...
貌似split只能自己定义分割的文件名
split -l 500000 aaa a01.txt
这样结果就成了
a01.txtaa a01.txtab
达到不我想要的结果...
作者:
Herowinter
时间:
2014-07-08 20:26
怎么又来了,没觉得50w和上午的20相比有什么本质区别。。。
作者:
o枫叶o飘零
时间:
2014-07-08 20:45
中午出去有事了 没有看帖子
看了下上午的帖子 变更的代码如下
awk -v m=500000 '{if(NR%m==1)f++;print>"a"f".txt"}' aaa
生成的文件如下
a1.txt a2.txt ......a10.txt
前10位能否补成a01.txt a02.txt?
作者:
Kasiotao
时间:
2014-07-09 00:20
回复
3#
o枫叶o飘零
楼主要不要这样。。。我觉得各位大大已经写的够清楚了,你好歹也学一点点把,awk的语法和c是类似的吧?
awk -v m=2 '{if(NR%m==1)f++;n=f<10?"0"f:f;print>"a"n".txt"}
复制代码
作者:
yestreenstars
时间:
2014-07-09 09:10
awk -vm=50000 '{if(NR%m==1)f++;f=sprintf("%02d",f);print > "a"f".txt"}' aaa
复制代码
作者:
Herowinter
时间:
2014-07-09 09:12
回复
5#
yestreenstars
还是星辰大神好,不过50W好像还要1个零。
作者:
yestreenstars
时间:
2014-07-09 09:12
回复
6#
Herowinter
不要在意这些细节啦~
作者:
lklkxcxc
时间:
2014-07-24 14:42
回复
5#
yestreenstars
不好意思,请教你:
我理解的是
(NR%m==1)不是只代表1-50000行,那后面的50001-100000 。。。。是怎么分割的
作者:
yestreenstars
时间:
2014-07-24 14:48
回复
8#
lklkxcxc
1、500001、1000001、……
这些行和500000相余都等于1
作者:
li0924
时间:
2014-07-24 14:52
split有个d的参数
split -d -l 500000 aaa a
复制代码
作者:
lklkxcxc
时间:
2014-07-24 15:07
回复
5#
yestreenstars
谢谢回答,模仿大师:
awk -v m=10 '{if(NR%m==1)f++;f=1;print > f".txt"}' hosts
生成的1.txt怎么是全部hosts文件记录,2.txt才是前10行,没有3.txt。hosts里面记录超过100行
每太搞懂循环的过程,
有没有想过文档可以去看下大师的思路,谢啦
作者:
li0924
时间:
2014-07-24 15:10
回复
11#
lklkxcxc
你把f=1去掉;
作者:
Shell_HAT
时间:
2014-07-24 15:10
回复
11#
lklkxcxc
awk -v m=10 '{if(NR%m==1)f++;
f=1
;print > f".txt"}' hosts
你这个 f=1 的目的是什么?
作者:
lklkxcxc
时间:
2014-07-24 15:11
回复
13#
Shell_HAT
f=1纯粹是为了后面命名1.txt,2.txt。说实话没搞懂f++代表的意思
作者:
Shell_HAT
时间:
2014-07-24 15:15
回复
14#
lklkxcxc
++ 是自加运算符
第1次执行 f++ 之后,f=1
第2次执行 f++ 之后,f=2
第3次执行 f++ 之后,f=3
......
作者:
lklkxcxc
时间:
2014-07-24 15:23
回复
15#
Shell_HAT
这会懂了,谢谢大家!
我改写成这个把循环的过程看到了,明白了那个循环处理过程:
awk -v m=10 '{if(NR%m==1)f++;print f}' hosts
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2