Awk
按兩列比較多個文件行,匹配第一個比較第二個
我有兩個像這樣的輸入文件:
文件 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 文件,但我無法添加有條件的價格
您只需要選擇正確的列並首先閱讀
file2
thenfile1
,另外您還需要比較值部分以及關鍵部分:awk -F';' 'NR==FNR{ id[$1]=$4; next} ($1 in id) && id[$1]!=$4' file2 file1
這裡
$1
用於數組id的鍵,$4
是值部分。