2010-08-12 81 views
1

我有一個包含200,000行的CSV文件(foo.csv)。我需要將它分成四個文件(foo1.csv,foo2.csv等),每個文件有50,000行。從大csv文件中提取n行文本

我已經嘗試過使用gui文本編輯器的簡單ctrl-v/-c,但是我的電腦放慢了速度。

我可以用什麼unix命令來完成這項任務?

回答

2
sed -n 2000,4000p somefile.txt 

將從行2000到4000打印到標準輸出。

4

我沒有方便的終端試用它,但它應該只是split -d -l 50000 foo.csv

希望命名不是非常重要,因爲使用-d選項,輸出文件將被命名爲foo.csv00 .. foo.csv03。您可以添加-a 1選項,以便後綴爲0-3,但是沒有簡單的方法將後綴注入到文件名的中間。

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

0

您可以使用sed

0

我寫了這個小shell腳本爲this topic在你的非常相似。

這個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 

命令(它將從第二到第四行解在該文件):

[email protected]:~$./script.sh 2 4 file.txt 

此命令的輸出:

two 
three 
four 

當然,您可以改進它,例如通過測試所有參數值是預期的:-)