FileAとFileBの2つのファイルがあります。 FileAが変更されます。 FileBには新しい値が含まれています。 FileBには3つのフィールドがあります。最初の2つのフィールドは、FileAの最初の2つのフィールドと比較されます。フィールドが一致する場合は、Field3を変更する必要があります。以下のコードはこのように動作しています: "2つの値が一致する場合は、フィールド3を変更して行を印刷します。一致するものがなければ、次に"私が望むふるまいは、「一致がなければ、行をそのまま印刷します」。コードの "else"部分は機能しません。私は非常に多くのバリエーションを試しました。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