在for循环中使用awk打印指定行的某列无输出,求技术帮助
问题排查与解决
首先你的代码核心问题是拼写错误:awk语句里把print写成了ptint,这直接导致awk无法执行打印操作,所以没有任何输出。
修正后的原循环代码
把拼写错误修正后,你的代码就能正常输出预期结果:
for i in {3..5};do awk -F " " -v var=$i 'FNR==var {print $1}' sfs_file.new.txt done
更高效的优化方案
不需要用shell循环多次调用awk(每次调用都要重新读取一次文件,效率较低),可以直接用awk一次性处理所有目标行:
# 匹配行号3到5的范围 awk 'FNR>=3 && FNR<=5 {print $1}' sfs_file.new.txt # 或者精准指定单个行号 awk 'FNR==3 || FNR==4 || FNR==5 {print $1}' sfs_file.new.txt
执行后会直接输出符合预期的结果:
65 71 58
这种写法只需要读取一次文件,比循环调用awk的效率更高。
内容的提问来源于stack exchange,提问作者BeeBern
相关产品推荐
相关产品推荐

