Text-Processing
使用 AWK 將兩個 txt 文件合併為一個並添加缺少的項目
我的目標是將這兩個文件合併為一個,如果第二個文件中存在第一項,則首先讀取,如果不只是複制,則更新它
- 第一個文件
a.txt
AAA;2020-09-01;Y BBB;2020-09-01;Y CCC;2020-09-01;Y
- 第二個文件
b.txt
AAA;2020-09-01;Y;21/08/2020 BBB;2020-09-01;Y
- 期望的結果
c.txt
AAA;2020-09-01;Y;21/08/2020 BBB;2020-09-01;Y CCC;2020-09-01;Y
我嘗試了這段程式碼,但結果缺少
CCC
原始程式碼,我該如何解決這個問題?gawk -F, "FNR==NR{a[$1]=$1;next} $1 in a{$1=a[$1]} 1" OFS=, a.txt b.txt > c.txt
您的方法的問題是:
- 您指定 a
,
作為欄位分隔符,儘管您的文件是;
-separated"
您已將導致 shell 解釋$1
為位置參數而不是awk
將其解釋為欄位的程序包含在其中;您應該始終將awk
程序用單引號括起來'
。- 您正在從 建構“替換值列表”(儲存在數組中
a
)a.txt
,儘管您聲明它應該基於b.txt
.- 您只儲存此列表中的第一個欄位 (
a[$1]=$1
),而您應該儲存整行以用於從b.txt
to的副本a.txt
(iea[$1]=$0
)。- 當“鍵”(第一項)出現在 中時
b.txt
,您只需將 的第一個欄位替換為a.txt
中的相應行b.txt
,儘管您應該替換整行(即$0=a[$1]
,而不是$1=a[$1]
)。所以看起來你正在尋找這樣的東西:
gawk -F';' 'FNR==NR{a[$1]=$0; next} ($1 in a) {$0=a[$1]} 1' b.txt a.txt > c.txt