Linux

如何加入具有相同行數的兩個csv

  • November 25, 2018

我有兩個已排序且行數相同的 CSV 文件。我想加入這兩個 CSV 文件。

1.csv
1,2,3
4,5,6
7,8,9

2.csv
10,11,12
13,14,15
16,17,18

result.csv
1,2,3,10,11,12
4,5,6,13,14,15
7,8,9,16,17,18

我試過了, cat 1.csv 2.csv >result.csv 但它附加而不是加入。

工作paste

paste -d, {1,2}.txt

-d,將分隔符設置為,. {1,2}.txt是由 shell 完成的大括號擴展,將擴展為1.txt 2.txt.


如果你喜歡一點awk

awk 'NR==FNR {a[FNR]=$0; next} {print a[FNR], $0}' OFS=, {1,2}.txt
  • NR==FNR僅適用於第一個文件;{a[FNR]=$0; next}創建一個數組a,其中記錄號作為鍵,記錄作為值
  • 對於第二個文件,{print a[FNR], $0}列印相應行號處的數組元素,後跟目前記錄;OFS=,將輸出欄位分隔符設置為,

例子:

$ cat 1.txt 
1,2,3
4,5,6
7,8,9

$ cat 2.txt 
10,11,12
13,14,15
16,17,18

$ paste -d, {1,2}.txt
1,2,3,10,11,12
4,5,6,13,14,15
7,8,9,16,17,18

$ awk 'NR==FNR {a[FNR]=$0; next} {print a[FNR], $0}' OFS=, {1,2}.txt
1,2,3,10,11,12
4,5,6,13,14,15
7,8,9,16,17,18

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