Shell-Script
合併目錄列中的所有csv文件
假設目錄包含 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
,對於下一個文件,我們只需附加第二個欄位。