我已經存儲在LINUX服務器上的CSV文件(大約10,000行;每行有300列)。 我想把這個CSV文件分成500個CSV文件,每個文件20個記錄。 (每個版本與原始CSV文件中的CSV標頭相同)如何根據指定的行數分割CSV文件?
是否有任何Linux命令可以幫助進行此轉換?
我已經存儲在LINUX服務器上的CSV文件(大約10,000行;每行有300列)。 我想把這個CSV文件分成500個CSV文件,每個文件20個記錄。 (每個版本與原始CSV文件中的CSV標頭相同)如何根據指定的行數分割CSV文件?
是否有任何Linux命令可以幫助進行此轉換?
這工作:
tail -n +2 file.txt | split -l 20 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat $file >> tmp_file
mv -f tmp_file $file
done
上找到:http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
使用Linux的分裂命令:
split -l 20 file.txt new
分割文件「file.txt的」與名稱開頭的「新」,每箱20行,每行的文本文件。
在Unix提示符下鍵入man split
以獲取更多信息。但是,您必須先從file.txt中刪除標題(例如,使用tail
命令),然後將其重新添加到每個分割文件。
帶有示例鏈接的好的詳細信息:: https://kb.iu.edu/d/afar – user2663609
如何跳過file.txt(頭)行? – forkfork
使用'wc -l'獲取行數,然後取這個值減1(假設'wc -l'給出了50),然後運行'tail -n 49'(在這個例子中)來獲得除了標題行。請注意,'wc -l'計數爲
這應該爲你做到這一點 - 所有的文件將結束所謂的第一部分,Part500。
#!/bin/bash
FILENAME=10000.csv
HDR=$(head -1 $FILENAME) # Pick up CSV header line to apply to each file
split -l 20 $FILENAME xyz # Split the file into chunks of 20 lines each
n=1
for f in xyz* # Go through all newly created chunks
do
echo $HDR > Part${n} # Write out header to new file called "Part(n)"
cat $f >> Part${n} # Add in the 20 lines from the "split" command
rm $f # Remove temporary file
((n++)) # Increment name of output part
done
這創建了文件,但製表符(我的意思是\ t)被替換爲空格,並且我的CSV文件使用\ t作爲分隔符 – AmineG
這可以通過填充數字來稍微改進,以便文件連續顯示自動。用$(printf「%05d \ n」$ n)替換$ {n} –
標題行在第一個文件中被複制。 –
這應該工作!
file_name
=要分割的文件的名稱。
10000
=行數各分割文件將包含
file_part_
=分割的文件名(file_part_0,file_part_1,file_part_2..etc變亮)的前綴
分裂-d -l 10000 file_name.csv file_part_
這確實有效,但是,第一個文件的標題將被複制,從而給出第一個csv文件2個標題。 – rickman