我有一個包含200,000行的CSV文件(foo.csv)。我需要將它分成四個文件(foo1.csv,foo2.csv等),每個文件有50,000行。從大csv文件中提取n行文本
我已經嘗試過使用gui文本編輯器的簡單ctrl-v/-c,但是我的電腦放慢了速度。
我可以用什麼unix命令來完成這項任務?
我有一個包含200,000行的CSV文件(foo.csv)。我需要將它分成四個文件(foo1.csv,foo2.csv等),每個文件有50,000行。從大csv文件中提取n行文本
我已經嘗試過使用gui文本編輯器的簡單ctrl-v/-c,但是我的電腦放慢了速度。
我可以用什麼unix命令來完成這項任務?
sed -n 2000,4000p somefile.txt
將從行2000到4000打印到標準輸出。
我沒有方便的終端試用它,但它應該只是split -d -l 50000 foo.csv
。
希望命名不是非常重要,因爲使用-d
選項,輸出文件將被命名爲foo.csv00
.. foo.csv03
。您可以添加-a 1
選項,以便後綴爲0-3,但是沒有簡單的方法將後綴注入到文件名的中間。
您應該使用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
。
分裂-l50000 foo.csv
您可以使用sed
我寫了這個小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
當然,您可以改進它,例如通過測試所有參數值是預期的:-)