从大型csv文件中提取n行文本

时间:2010-08-12 16:21:47

标签: grep unix

我有一个包含200,000行的CSV文件(foo.csv)。我需要将它分成四个文件(foo1.csv,foo2.csv ......等),每个文件有50,000行。

我已经使用gui文本编辑器尝试过简单的ctrl-v / -c,但是我的计算机停止运行。

我可以使用哪些unix命令来完成此任务?

6 个答案:

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

您应该使用headtail

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

当然,您可以改进它,例如通过测试所有参数值是预期的: - )