Dranian
2013-02-01 02:40:17 UTC
您需要的不僅僅是 cat
命令,如此處所述:
假設您有3個CSV文件: file1 .csv
, file2.csv
和 file3.csv
,並希望將它們加入 bigfile.csv
,並且標題始終是(僅)第一行,然後使用
(從第一個文件“ file1.csv”保留標題):
cat file1.csv <(tail +2 file2 .csv)<(tail +2 file3.csv)> bigfile.csv
或(或從所有以“ file”開頭的文件中刪除標題):
awk'FNR > 1'文件* .csv > bigfile.csv
我同意最高答案,但我建議在以下情況下進行擴展(因為我無法發表評論):
如果您希望輸出文件包含標頭(一次),則正確的腳本是:
awk'(NR == 1)||(FNR > 1)'文件* .csv > bigfile.csv
FNR表示單個文件中已處理記錄的數量。NR全局表示它,因此第一行被接受,其餘的如以前一樣被忽略。
您還可以使用組命令( {;}
)代替進程替換( <()
):
{頭-n1 file1.csv;對於文件* .csv中的f;做尾巴-n + 2“ $ f”;完成} > new.csv
只要文件以空行( \ r \ n
)結尾,它也適用於CRLF行尾。
POSIX 1003.1-2001禁止使用僅數字版本的頭和尾,在某些環境中它們會導致警告。
需要將具有相同列的兩個大型CSV連接到較大的CSV中,以用於分塊腳本(數據沒有唯一的ID)。
First從第二個csv中取出標題
awk'FNR > 1'file2.csv > file2_noheading.csv
Next,通過以下串聯
cat file1.csv file2_noheading.csv > newfile.csv
使用上面的命令序列產生的文件如下所示:
header,of,csv1contents,of,csv1 == > csv2.csvcontents,of,csv2
要使其具有一個標題行和所有相關值,以使其成為適當的CSV,我使用了以下 sed
咒語... sed -ie“ / ^ $ / d; / ^ == > / d“ bigfile.csv
如果您有大量文件,則是更簡單的解決方案:
awk'FNR > 1'* .csv > merged.csv
只需回去編輯大文件並重新添加標題即可。