如何通过行号将大文件拆分为小文件

时间:2013-05-25 19:25:48

标签: file unix split numbers line

我正在尝试使用行号将我的大文件拆分成小块。例如,我的文件有30,000,000行,我想把它分成小文件,其中有10,000行(相当于3000个小文件)。

我在unix中使用了'split',但它似乎只限于100个文件。

有没有办法克服100个文件的限制?

如果还有其他方法,请提供建议。

感谢。

2 个答案:

答案 0 :(得分:1)

使用GNU awk

gawk '
BEGIN {
        i=1
    } 
    {
        print $0 > "small"i".txt" 
    } 
NR%10==0 {
    close("file"i".txt"); i++ 
    }' bigfile.txt

测试:

[jaypal:~/temp] seq 100 > bigfile.txt

[jaypal:~/temp] gawk 'BEGIN {i=1} {print $0 > "small"i".txt" } NR%10==0 { close("file"i".txt"); i++ }' bigfile.txt

[jaypal:~/temp] ls small*
small1.txt  small10.txt small2.txt  small3.txt  small4.txt  small5.txt  small6.txt  small7.txt  small8.txt  small9.txt

[jaypal:~/temp] cat small1.txt
1
2
3
4
5
6
7
8
9
10

[jaypal:~/temp] cat small10.txt
91
92
93
94
95
96
97
98
99
100

答案 1 :(得分:0)

不是答案,只是添加了一种方法来按照评论中的要求进行重命名 -

$ touch 000{1..5}.txt

$ ls
0001.txt  0002.txt  0003.txt  0004.txt  0005.txt

$ rename 's/^0*//' *.txt

$ ls
1.txt  2.txt  3.txt  4.txt  5.txt

我也尝试了上面的3000文件没有任何问题。