Text-Processing

使用 AWK 將兩個 txt 文件合併為一個並添加缺少的項目

  • August 21, 2020

我的目標是將這兩個文件合併為一個,如果第二個文件中存在第一項,則首先讀取,如果不只是複制,則更新它

  • 第一個文件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程序用單引號括起來'
  • 您正在從 建構“替換值列表”(儲存在數組中aa.txt,儘管您聲明它應該基於b.txt.
  • 您只儲存此列表中的第一個欄位 ( a[$1]=$1),而您應該儲存整行以用於從b.txtto的副本a.txt(ie a[$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

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