Chinaunix
标题:
split多个连续文件分割,如何保证文件号连续?请大虾指教
[打印本页]
作者:
C307307
时间:
2011-05-15 12:56
标题:
split多个连续文件分割,如何保证文件号连续?请大虾指教
本帖最后由 C307307 于 2011-05-15 15:15 编辑
这里有个问题,简化如下:
假如我生成了10个文件,分别为
file_0001.dat,file2_0002.dat,……,file_0010.dat,每个文件的大小为45M,但要求生成的文件大小不能超过10M,举例如下:
file_0001.dat有45M,则要分成5个文件,分别为new_file_0001.dat,newfile_0002.dat,……,newfile_0005.dat,不管newfile_0005.dat是否
到达10M,file_0002.dat必须从newfile_0006.dat开始分割。所以最后肯定会生成50个文件,
文件从newfile_0001.dat到newfile_0050.dat.
这时候用split命令来分割,如何完成?
ps:这10个文件是依次生成的,也就是可以在每个文件生成后,来split一下。
作者:
xiaopan3322
时间:
2011-05-15 13:29
先split,然后cat:
split -b ${blocksize}m ${file} ${filename}
cat ${filename}?* > ${filename}
复制代码
作者:
yinyuemi
时间:
2011-05-15 13:43
本帖最后由 yinyuemi 于 2011-05-15 13:48 编辑
回复
1#
C307307
Try:
n=0
for i in *.dat
do
split -b 5M "$i" -d x
for j in {0..4}
do
((n++))
printf -v name "%04.f" $n
mv "x0"$j "new_"$name".dat"
done
done
复制代码
作者:
C307307
时间:
2011-05-15 13:49
回复
3#
yinyuemi
谢谢,这个思路可以。
作者:
C307307
时间:
2011-05-15 13:51
回复
2#
xiaopan3322
谢谢,
这两个命令都没怎么看明白 ,能否解释下
作者:
xiaopan3322
时间:
2011-05-15 14:18
回复
5#
C307307
可能我一开始理解错了题意,拆分了以后,是不是不需要再重新重组回来的(重新组合用cat)?
如果不需要重新重组的话,你可以用yinyuemi的思路……
作者:
C307307
时间:
2011-05-15 14:34
回复
6#
xiaopan3322
可能是我每说清楚,就是有10个文件,大小超标了,要拆分,拆分后生成的文件要按原来文件的顺序按序号排列。
作者:
xiaopan3322
时间:
2011-05-15 14:39
回复
7#
C307307
明白你的意思了,这个需求。。。单纯用split完成不了……做个workaround的吧……
1. 可否先将那些源文件重组,然后一次性拆分
2. 先拆分,然后对拆分后的进行处理(比如放到带文件编号的文件夹下,然后通过判断,依次重命名)
作者:
C307307
时间:
2011-05-15 14:52
回复
8#
xiaopan3322
1.这10个文件不能重组的,他们分别对应10张表,各自独立,不过这个想法倒不错
2.这样肯定是可以的,不过我感觉较复杂了。
作者:
Shell_HAT
时间:
2011-05-15 14:56
回复
7#
C307307
能否说说超的是什么标?为何会有那样的标?
作者:
C307307
时间:
2011-05-15 15:08
本帖最后由 C307307 于 2011-05-15 15:16 编辑
回复
10#
Shell_HAT
其实是对文本进行操作,对源文件的内容每一行添加两个字段,写入到新文件,但新文件不能超过指定大小。
判断是否超标是在写完后的,因为在每行写入后去判断肯定会影响速度。所以直接在文件写完后,split下。
这样的文件有10个
i=1
while i<=10
do
awk生成新的文件。
split新文件
……
i++
done
举例:
file_0001.dat,file2_0002.dat,……,file_0010.dat,每个文件的大小为45M,但要求生成的文件大小不能超过 10M(这个不定):
file_0001.dat有45M,则要分成5个文件,分别为 new_file_0001.dat,newfile_0002.dat,……,newfile_0005.dat,不管newfile_0005.dat是否
到达10M,file_0002.dat必须从newfile_0006.dat开始分割。所以最后肯定会生成50个文件,
文件从newfile_0001.dat到newfile_0050.dat.
文件序号如何连续 0001.dat到0050.dat??
要求速度快额
作者:
db2-zhang
时间:
2011-05-15 22:04
回复
3#
yinyuemi
想问下:printf -v name "%04.f" $n
这句什么作用啊???
谢了!
作者:
yinyuemi
时间:
2011-05-16 01:33
本帖最后由 yinyuemi 于 2011-05-16 05:48 编辑
回复
12#
db2-zhang
将printf得到的值赋于变量name。
http://bbs.chinaunix.net/thread-2300359-1-1.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2