我在同一個目錄中有兩個具有相同列數的 .csv 檔案,我想將它們組合成一個檔案,但只保留第一個檔案的一個標題。檔案名總是不同的,只有前綴保持不變:
orderline_123456.csv
Order_number,Quantity,Price
100,10,25.3
101,15,30.2
orderline_896524.csv
Order_number,Quantity,Price
102,20,12.33
103,3,3.4
輸出檔案應該是這樣的:
file_load.csv
Order_number,Quantity,Price
100,10,25.3
101,15,30.2
102,20,12.33
103,3,3.4
這已經在 shell 腳本檔案中,因為現在我只需要獲取一個檔案,但現在我必須合并兩個檔案:
awk '(NR-1)%2{$1=$1}1' RS=\" ORS=\" orderline_*.csv >> file_to_load.csv
我試著把它改成
awk 'FNR == 1 && NR != 1 {next} (NR-1)%2{$1=$1}1' RS=\" ORS=\" orderline_*.csv >> file_to_load.csv
但我在輸出中得到了兩次標題。
請你幫助我好嗎?該命令到底應該是什么樣子?我需要保留之前的定義。
謝謝!
uj5u.com熱心網友回復:
您正在尋找
awk 'NR == 1 || FNR > 1' file ...
NR 是看到的所有記錄的計數,
FNR 是當前檔案的記錄數。
uj5u.com熱心網友回復:
有時解決方案是將任務分成簡單的步驟
1. 獲取作為標題的第一行并存盤為變數

header=$(head -n 1 file1.csv)
2. 獲取檔案除第一行以外的所有行

3.連接標題和n個正文
csv_merger.sh
header=$(head -n 1 file1.csv)
body1=$(tail -n 2 file1.csv)
body2=$(tail -n 2 file2.csv)
echo "$header" > merged.csv
echo "$body1" >> merged.csv
echo "$body2" >> merged.csv
結果

您可以擴展此腳本以處理更多檔案
uj5u.com熱心網友回復:
csvstack使用方便的csvkit包是一種將 CSV 檔案與相同列合并的方法:
$ csvstack orderline_123456.csv orderline_896524.csv > file_load.csv
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/532739.html
標籤:重击Unix
上一篇:文本檔案中的查找值替換
下一篇:使用回圈創建多個.sh檔案
