Shell-Script

合併目錄列中的所有csv文件

  • April 21, 2022

假設目錄包含 3 個 csv 文件:

第一個csv:

Name, John
Age, 18

第二個csv:

Name, Jim
Age, 21

第三個csv:

Name, Amy
Age, 22

我希望結果是:

Name, John, Jim, Amy
Age, 18, 21, 22

重要的是要知道該目錄可能有 n 個 csv 我有 bash 和 posix shell 可用

編輯:

這感覺它應該可以工作,但在訂單方面仍然存在問題:

awk -F, -v OFS="," '{a[FNR]=a[FNR]?a[FNR]FS$2:$1FS$2}END{for(x in a)print x,a[x]}' *.csv > results.csv

這是沒有意義的,因為 FNR 1 應該是數組中的第一個,但它是最後列印的?

你的嘗試非常接近。以下是一些修改,以使其按要求工作:

awk -F, -v OFS="," '{
       a[FNR] = (FNR==NR ? $0 : a[FNR] OFS $2)
   }
   END { 
       for(i=1;i<=FNR;i++) print a[i]
   }' *.csv

for (x in a)不保證數組訪問順序,所以為了保持順序,我們在for循環中執行一個數字索引。我們也可以使用for (i=1;i<=length(a);i++),但很高興知道將數組作為參數傳遞給length()並非所有 awk 的標準,您可以在GNU awk 手冊中看到這一點。

另請參閱:掃描陣列

此外,我們使用FNR==NR“解析第一個文件時”的成語條件,並希望保存整行$0,對於下一個文件,我們只需附加第二個欄位。

引用自:https://unix.stackexchange.com/questions/699758