You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:59:55