我有兩個文件 - FileA和FileB。 FileA將被改變。 FileB包含新的值。 FileB有3個字段。前兩個字段將與FileA的前兩個字段進行比較。如果這些字段匹配,則應更改Field3。下面的代碼以這種方式工作:「如果兩個值匹配,則更改field3並打印該行,如果沒有匹配,則接下來。」我想要的行爲是,「如果沒有匹配,則不改變地打印該行。」代碼的「其他」部分不起作用,我嘗試了很多變體。AWK如果匹配,打印帶有新值的字段,否則打印行
awk -F'\t' -v OFS='\t' '
# first, read in data from file B
NR == FNR { values[$1 FS $2] = $3; next }
# then, output modified lines from matching lines in file A
($1 FS $2) in values { $3 = values[$1 FS $2]; print } else { print $0 }
' fileB fileA
FILEA
PROVDSRJ02.RD.RI ae0.0 16
PROVDSRJ02.RD.RI ae1.1 1000
PROVDSRJ02.RD.RI ae2.0 5000
PROVDSRJ02.RD.RI ae3.0 5000
ASHBBBRJ01.RD.AS ae39.0 16
ASHBBPRJ01.RD.AS ae2.0 16
ASHBBPRJ02.RD.AS ae1.0 16
ASHBBPRJ02.RD.AS ae2.0 16
ASHBBBRJ01.RD.AS ae0.0 16
ASHBBBRJ01.RD.AS ae11.0 16
FILEB
ASHBBBRJ01.RD.AS ae10.0 524
ASHBBBRJ01.RD.AS ae11.0 235
ASHBBBRJ01.RD.AS ae39.0 2096
ASHBBBRJ01.RD.AS ae6.0 183
ASHBBBRJ01.RD.AS ae7.0 1141
ASHBBBRJ02.RD.AS ae11.0 88
ASHBBBRJ02.RD.AS ae13.0 333
ASHBBBRJ02.RD.AS ae20.0 374
ASHBBBRJ02.RD.AS ae9.0 1885
所需的輸出(**表示改變的行,並且不應該被包括在代碼)
PROVDSRJ02.RD.RI ae0.0 16
PROVDSRJ02.RD.RI ae1.1 1000
PROVDSRJ02.RD.RI ae2.0 5000
PROVDSRJ02.RD.RI ae3.0 5000
**ASHBBBRJ01.RD.AS ae39.0 2096**
ASHBBPRJ01.RD.AS ae2.0 16
ASHBBPRJ02.RD.AS ae1.0 16
ASHBBPRJ02.RD.AS ae2.0 16
ASHBBBRJ01.RD.AS ae0.0 16
**ASHBBBRJ01.RD.AS ae11.0 235**
請將'FileA'和'FileB'的樣本與期望的輸出一起發佈。謝謝。 –
請仔細閱讀[MCVE](https://stackoverflow.com/help/mcve)並遵守它或有被忽略的風險 – Thor
它不是重複的。有人評論了最後一篇文章,並說要創建一個新帖子...我只是按照我所告訴的... – user3746195