在Bash中实现查找匹配并进行数学计算的方法求助
在Bash中实现文本匹配与数值计算
问题说明
现有两个文本文件:
file1.txt内容:
veg potato 2 fruit orange 4 fruit apple 3
file2.txt内容(注意行首有空格):
orange 7 potato 18 apple 9 mango 4 onion 3
需要完成的操作:将file1.txt的第二列与file2.txt的第一列匹配,把匹配到的file1.txt第三列数值和file2.txt第二列数值相乘,最终生成file3.txt,预期结果如下:
veg potato 36 fruit orange 28 fruit apple 27
解决方案
用awk命令就能高效搞定这个需求,它专门擅长处理文本列操作和关联匹配:
awk 'NR==FNR {map[$1]=$2; next} $2 in map {printf " %s %s %d\n", $1, $2, $3*map[$2]}' file2.txt file1.txt > file3.txt
命令拆解
NR==FNR:处理第一个文件(file2.txt)时这个条件成立——NR是当前处理的总行数,FNR是当前文件内的行数,只有处理第一个文件时两者数值相等。map[$1]=$2:把file2.txt的第一列(自动忽略行首空格)作为键,第二列的数值作为对应值,存入关联数组map。next:跳过后续操作直接处理下一行,确保第一个文件只做数组填充工作。$2 in map:处理第二个文件(file1.txt)时,检查当前行的第二列是否存在于map的键集合中。printf " %s %s %d\n", $1, $2, $3*map[$2]:匹配成功时,按指定格式输出——开头加两个空格,接着保留原第一、第二列内容,最后输出两列数值的乘积,结果直接写入file3.txt。
验证结果
执行完命令后,用以下命令查看生成的文件:
cat file3.txt
就能得到预期的输出内容。
内容的提问来源于stack exchange,提问作者Charlie_22
相关产品推荐
相关产品推荐

