如何在不破坏线条的情况下将文件分成3个相等(或几乎相等)的行数。
例如,将25行的文件分成3个文件,每个9,8和8行。
我知道split -n l/3
但不适用于Solaris10。
尝试了一些我上网的东西,但没有给出想要的结果,如:
!/usr/bin/ksh
fspec=~/input.list
num_files=3
total_lines=$(wc -l <${fspec})
((lines_per_file = (total_lines + num_files - 1) / num_files))
split -l ${lines_per_file} ${fspec} files.
答案 0 :(得分:-2)
以下是awk
awk '{a[NR]=$0} END {t=int (NR/s);r=((NR/s-t)*s);while (n<s) for (i=t*n+++1;i<=t*n;i++) print a[i] > "file"n;while (i++<=NR) print a[i-1] > "file"n}' s=3 infile
这会将infile
分割为s
个文件。如果您设置s=3
,则会获得file1
file2
file3
不分割的数据最后会在最后一个文件中结束。
实施例
cat number
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine
10 ten
awk '{a[NR]=$0} END {t=int (NR/s);r=((NR/s-t)*s);while (n<s) for (i=t*n+++1;i<=t*n;i++) print a[i] > "file"n;while (i++<=NR) print a[i-1] > "file"n}' s=3 number
cat file1
1 one
2 two
3 three
cat file2
4 four
5 five
6 six
cat file3
7 seven
8 eight
9 nine
10 ten