複数のファイルの行と列を比較し、最初のファイルを一致させ、2番目のファイルを比較します。

複数のファイルの行と列を比較し、最初のファイルを一致させ、2番目のファイルを比較します。

次の2つの入力ファイルがあります。

ファイル1

ABC001;text;text;5.00;text;text;;20/06/2020;http://www.domain.com/img/foobar4325.jpg
ABC002;text;text;15.20;text;text;;4/12/2021;http://www.domain.com/img/foobar545.jpg
ABC003;text;text;10.00;text;text;;24/07/2021;http://www.domain.com/img/foobar6y6.jpg
ABC004;text;text;4.90;text;text;;31/12/2021;http://www.domain.com/img/foobar5464.jpg
ABC007;text;text;10.30;text;text;;3/12/2021;http://www.domain.com/img/foobar45tgv.jpg
ABC010;text;text;9.00;text;text;;20/12/2021;http://www.domain.com/img/foobar2345f.jpg

file2(「丸められた」価格には.00は含まれていません)

ABC001;text;text;6
ABC002;text;text;15.20
ABC003;text;text;10
ABC004;text;text;5.50
ABC005;text;text;25
ABC007;text;text;10.50
ABC010;text;text;9

希望の出力:

ABC001;text;text;5.00;text;text;;20/06/2020;http://www.domain.com/img/foobar4325.jpg
ABC004;text;text;4.90;text;text;;31/12/2021;http://www.domain.com/img/foobar5464.jpg
ABC007;text;text;10.30;text;text;;3/12/2021;http://www.domain.com/img/foobar45tgv.jpg

行は最初の列と一致し、一致する行を「価格」列(5番目)と比較する必要があり、価格が数値的に異なる場合はfile1から行を抽出したいと思います。

私はこれを使用します(GNU Awk 4.0.2):

awk -F';' -v RS='[\r\n]+' 'FNR==NR{righe[$1]; next} $1 in righe' file1.csv file2.csv > output.csv

2つのCSVファイルを比較するために価格条件を追加することはできません。

答え1

正しい列を選択して最初に読み取る必要がありfile2file1値部分とキー部分も比較する必要があります。

awk -F';' 'NR==FNR{ id[$1]=$4; next} ($1 in id) && id[$1]!=$4' file2 file1

ここで$1配列に使用されるキーIDそして$4価値の一部です。

関連情報