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
相关产品推荐
相关产品推荐

