【发布时间】:2016-04-26 02:31:23
【问题描述】:
我有两个长度相等的文件(即行数):
- text.zh
- text.cs
我想将文件逐步拆分为 12 个部分,并且在迭代时,我需要将前 10 个部分中的 1 个添加到其中。
假设我的文件包含 100 行,我需要某种循环:
#!/bin/bash
F1=text.en
F2=text.cs
for i in `seq 0 9`;
do
split -n l/12 -d text.en
cat x10 > dev.en
cat x11 > test.en
echo "" > train.en
for j in `seq 0 $i`; do
cat x0$j >> train.en
done
split -n l/12 -d text.cs
cat x10 > dev.cs
cat x11 > test.cs
echo "" > train.cs
for j in `seq 0 $i`; do
cat x0$j >> train.cs
done
wc -l train.en train.cs
echo "############"
done
[出]:
55632 train.en
55468 train.cs
111100 total
############
110703 train.en
110632 train.cs
221335 total
############
165795 train.en
165011 train.cs
330806 total
############
它在文件之间给了我不相等的块。
另外,当我使用split 时,它会分成不等的块:
alvas@ubi:~/workspace/cvmt$ split -n l/12 -d text.en
alvas@ubi:~/workspace/cvmt$ wc -l x*
55631 x00
55071 x01
55092 x02
54350 x03
54570 x04
54114 x05
55061 x06
53432 x07
52685 x08
52443 x09
52074 x10
52082 x11
646605 total
我不知道号码。文件的行数,所以我不能使用split -l 选项。
如何将文件分成大小相等的大小。鉴于我事先不知道文件中有多少行?我应该对wc -l 进行某种预计算吗?
如何确保两个文件的分割在每个块中大小相等?
(注意,解决方案需要在行尾拆分文件,即不拆分任何行,只需逐行拆分文件)。
【问题讨论】:
标签: bash split text-files line