3

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

我在 unix 中使用了“拆分”,但它似乎仅限于 100 个文件。

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

如果有其他方法可以做到这一点,也请告知。

谢谢。

4

2 回答 2

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
于 2013-05-25T22:49:34.880 回答
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 个文件尝试了上述方法,没有任何问题。

于 2013-05-25T20:16:17.427 回答