題:
合併多個CSV文件而不合併標題
Dranian
2013-02-01 02:40:17 UTC
view on stackexchange narkive permalink

我需要合併多個.CSV文件(使用 cat 命令),但無需複制每個文件的標題。

完成此任務的最佳方法是什麼?

六 答案:
iolsmit
2013-02-01 03:16:49 UTC
view on stackexchange narkive permalink

您需要的不僅僅是 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  
我發現這是在尋找通用的Linux答案,但就我而言,這並不完全有效。它會默默地忽略file1.csv。我需要整理那個文件。 `cat <(cat file1.csv)<(tail +2 file2.csv)<(tail +2 file3.csv)> bigfile.csv`
實際上我必須使用`tail -n + 2`,`tail + 2`無效
Marek Grác
2019-01-15 14:40:27 UTC
view on stackexchange narkive permalink

我同意最高答案,但我建議在以下情況下進行擴展(因為我無法發表評論):

如果您希望輸出文件包含標頭(一次),則正確的腳本是:

awk'(NR == 1)||(FNR > 1)'文件* .csv > bigfile.csv

FNR表示單個文件中已處理記錄的數量。NR全局表示它,因此第一行被接受,其餘的如以前一樣被忽略。

Lri
2013-04-12 15:12:31 UTC
view on stackexchange narkive permalink

您還可以使用組命令( {;} )代替進程替換( <()):

  {頭-n1 file1.csv;對於文件* .csv中的f;做尾巴-n + 2“ $ f”;完成} > new.csv  

只要文件以空行( \ r \ n )結尾,它也適用於CRLF行尾。

POSIX 1003.1-2001禁止使用僅數字版本的頭和尾,在某些環境中它們會導致警告。

mcconnelljk
2017-03-11 19:49:52 UTC
view on stackexchange narkive permalink

需要將具有相同列的兩個大型CSV連接到較大的CSV中,以用於分塊腳本(數據沒有唯一的ID)。

First從第二個csv中取出標題

  awk'FNR > 1'file2.csv > file2_noheading.csv
 

Next,通過以下串聯

  cat file1.csv file2_noheading.csv > newfile.csv
 
hd1
2013-10-29 23:07:10 UTC
view on stackexchange narkive permalink

使用上面的命令序列產生的文件如下所示:

  header,of,csv1contents,of,csv1 == > csv2.csvcontents,of,csv2  

要使其具有一個標題行和所有相關值,以使其成為適當的CSV,我使用了以下 sed 咒語... sed -ie“ / ^ $ / d; / ^ == > / d“ bigfile.csv

brian
2017-03-21 04:51:46 UTC
view on stackexchange narkive permalink

如果您有大量文件,則是更簡單的解決方案:

  awk'FNR > 1'* .csv > merged.csv
 

只需回去編輯大文件並重新添加標題即可。

您的答案與iolsmit在2013年提出的所有答案有什麼不同,它們是“ awk'FNR> 1'file * .csv> bigfile.csv”?不是!
回复:有什麼不同?這是一個更簡潔的答案,至少是我複制和粘貼的答案:)
這是一個很好的答案,因為您不需要所有文件都以`file`開頭


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...