Bash 如何将小文件中的列与大文件匹配,并使用awk进行计算

Bash 如何将小文件中的列与大文件匹配,并使用awk进行计算,bash,csv,awk,Bash,Csv,Awk,我有一个小文件small.csv: 这个更大的文件big.csv: 我需要一个命令(可能是awk),它将在small.csv文件上循环,检查第一、第二和第三列是否与big.csv文件中的记录匹配,然后根据第四列计算差异small-big。因此,在上面的示例中,由于第一条记录的前3列与big.csv中的第四条记录匹配,因此输出为: SUCCEEDED|fe|L3-002559|10 其中10是110-100 谢谢假设前三个字段相似的行在两个文件中不会出现两次以上。这项工作: awk -F '|'

我有一个小文件small.csv:

这个更大的文件big.csv:

我需要一个命令(可能是awk),它将在small.csv文件上循环,检查第一、第二和第三列是否与big.csv文件中的记录匹配,然后根据第四列计算差异small-big。因此,在上面的示例中,由于第一条记录的前3列与big.csv中的第四条记录匹配,因此输出为:

SUCCEEDED|fe|L3-002559|10
其中10是110-100


谢谢

假设前三个字段相似的行在两个文件中不会出现两次以上。这项工作:

awk -F '|' 'FNR!=1 { key = $1 "|" $2 "|" $3; if(a[key]) print key "|" a[key]-$4; else a[key]=$4 }' small.csv big.csv

请你告诉我们你尝试了什么,以及它是如何失败的?或者你能至少告诉我们是什么阻止了你尝试吗?(即,你需要什么信息?)
SUCCEEDED|fe|L3-002559|10
awk -F '|' 'FNR!=1 { key = $1 "|" $2 "|" $3; if(a[key]) print key "|" a[key]-$4; else a[key]=$4 }' small.csv big.csv