Awk

按兩列比較多個文件行,匹配第一個比較第二個

  • February 15, 2022

我有兩個像這樣的輸入文件:

文件 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

這些行需要與第一列匹配,然後比較匹配的行“價格”列(第五),如果價格在數字上不同,我只想從 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

比較兩個 csv 文件,但我無法添加有條件的價格

您只需要選擇正確的列並首先閱讀file2then file1,另外您還需要比較值部分以及關鍵部分:

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

這裡$1用於數組id的鍵,$4是值部分。

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