我有一个包含200,000行的CSV文件(foo.csv)。我需要将它分成四个文件(foo1.csv,foo2.csv ......等),每个文件有50,000行。
我已经使用gui文本编辑器尝试过简单的ctrl-v / -c,但是我的计算机停止运行。
我可以使用哪些unix命令来完成此任务?
答案 0 :(得分:4)
我没有方便尝试的终端,但它应该只是split -d -l 50000 foo.csv
。
希望命名不是非常重要,因为使用-d
选项,输出文件将被命名为foo.csv00
.. foo.csv03
。您可以添加-a 1
选项,以便后缀为0-3,但没有简单的方法可以将后缀注入文件名的中间位置。
答案 1 :(得分:2)
sed -n 2000,4000p somefile.txt
将从第2000行到第4000行打印到stdout。
答案 2 :(得分:1)
您应该使用head
和tail
。
head -n 50000 myfile > part1.csv
head -n 100000 myfile | tail -n 50000 > part2.csv
head -n 150000 myfile | tail -n 50000 > part3.csv
等等......
但是,如果无法控制文件名,则可以使用unix命令split
。
答案 3 :(得分:1)
拆分-l50000 foo.csv
答案 4 :(得分:0)
您可以使用sed
答案 5 :(得分:0)
我为你的this topic写了一个非常类似的小shell脚本。
这个shell脚本+ awk对我来说很好用:
#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
if (NR >= initial_line && NR <= end_line)
print $0
}' $3
与此示例文件(file.txt)一起使用:
one
two
three
four
five
six
命令(它将从文件中的第二行提取到第四行):
edu@debian5:~$./script.sh 2 4 file.txt
输出此命令:
two
three
four
当然,您可以改进它,例如通过测试所有参数值是预期的: - )