将文件拆分成块,在solaris中保留完整的行

时间:2014-11-13 20:14:48

标签: perl shell awk solaris solaris-10

如何在不破坏线条的情况下将文件分成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.

1 个答案:

答案 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