Grep 从大型csv文件中提取n行文本
我有一个包含200000行的CSV文件(foo.CSV)。我需要把它分成四个文件(foo1.csv、foo2.csv…等等),每个文件有50000行 我已经尝试过使用gui文本编辑器简单地按ctrl-v/-c键,但是我的计算机的速度减慢到停止 我可以使用什么unix命令来完成此任务Grep 从大型csv文件中提取n行文本,grep,unix,Grep,Unix,我有一个包含200000行的CSV文件(foo.CSV)。我需要把它分成四个文件(foo1.csv、foo2.csv…等等),每个文件有50000行 我已经尝试过使用gui文本编辑器简单地按ctrl-v/-c键,但是我的计算机的速度减慢到停止 我可以使用什么unix命令来完成此任务 sed -n 2000,4000p somefile.txt 将从2000到4000行打印到标准输出 将从2000到4000行打印到标准输出。我手边没有一个终端可以试用,但它应该只是 希望命名不是非常重要,因为使用
sed -n 2000,4000p somefile.txt
将从2000到4000行打印到标准输出
将从2000到4000行打印到标准输出。我手边没有一个终端可以试用,但它应该只是
希望命名不是非常重要,因为使用
-d
选项,输出文件将命名为foo.csv00
<代码>foo.csv03。您可以添加-a 1
选项,使后缀为0-3,但没有简单的方法将后缀插入文件名的中间。我手边没有一个终端可以尝试,但它应该是
希望命名不是非常重要,因为使用
-d
选项,输出文件将命名为foo.csv00
<代码>foo.csv03。您可以添加-a 1
选项,使后缀为0-3,但没有简单的方法可以将后缀插入文件名的中间。您应该使用头
和尾
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
您应该使用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
split-l50000 foo.csvsplit-l50000 foo.csv您可以使用您可以使用我为您编写了这个非常类似的shell脚本
这个shell脚本+awk对我来说很好:
#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
if (NR >= initial_line && NR <= end_line)
print $0
}' $3
命令(它将从文件的第二行提取到第四行):
此命令的输出:
two
three
four
当然,您可以对其进行改进,例如,通过测试所有参数值是否都是预期值:-)我为您的类似项目编写了这个小shell脚本 这个shell脚本+awk对我来说很好:
#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
if (NR >= initial_line && NR <= end_line)
print $0
}' $3
命令(它将从文件的第二行提取到第四行):
此命令的输出:
two
three
four
当然,您可以改进它,例如通过测试所有参数值是否都是预期值:-)