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

Bash读取文本第三列执行awk报错无法打开-10.0问题求助

错误排查

你的脚本报错核心是两处逻辑错误:

  • awk调用参数错误:while read line读到的$line是文件每行的完整文本内容(比如第一行就是-10.0 -80.0 61.82 20.2163 1.80357 1.68673),你直接把$line作为参数传给awk时,awk会把空格分隔的每个字段都当作待读取的文件路径,第一个字段-10.0被识别为文件名,自然触发“找不到该文件”的报错。
  • 取整逻辑不符合预期:你用的printf("%.0f\n", $3)是四舍五入取整,样例里的61.82会被计算为62,和你要的“去除小数部分取整”需求不符。
正确实现

awk本身自带按行处理文本的能力,不需要嵌套while循环,一行命令就能实现你要的效果:

awk '{print int($3)}' final.txt

执行后直接输出你预期的结果:

61
61
63

如果你确实需要保留while read的循环结构,需要把读到的行内容通过标准输入传给awk,而不是作为文件名参数传入,修正后的写法如下:

while read -r line
do
  Temp=$(echo "$line" | awk '{print int($3)}')
  echo "$Temp"
done < final.txt

写法说明

  • awk内置的int()函数会直接截断数值的小数部分返回整数,完全匹配你“去掉小数部分取整”的需求;如果后续需要四舍五入取整,再换用printf("%.0f", $3)的写法即可。
  • read命令加-r参数是shell读文件的标准写法,可以避免行内的反斜杠等特殊字符被意外转义。
  • 推荐用$()代替反引号做命令替换,可读性更强,也支持多层嵌套不会出现转义冲突。

内容的提问来源于stack exchange,提问作者Monika

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:24:25