我正在尝试使用行号将我的大文件拆分成小块。例如,我的文件有30,000,000行,我想把它分成小文件,其中有10,000行(相当于3000个小文件)。
我在unix中使用了'split',但它似乎只限于100个文件。
有没有办法克服100个文件的限制?
如果还有其他方法,请提供建议。
感谢。
答案 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文件没有任何问题。