Bash脚本中用Awk提取Python生成CSV列失败问题排查
问题解决:从CSV提取指定列写入日志
问题原因
你的脚本里Awk默认用空白字符作为字段分隔符,但CSV是用逗号分隔的,所以awk '{print $4}'根本取不到第四列(整个CSV行只会被识别为一个字段),导致c1为空,最终data.log里只有行号。
修复方案
修改Awk命令,指定逗号为分隔符,同时根据CSV是否有标题行调整逻辑:
#!/bin/bash echo "A" > data.log n=1 maxn=5000 while [ $n -le $maxn ] do python python.py # 指定逗号为分隔符,跳过第一行(如果CSV有标题),提取第四列 c1=$(awk -F',' 'NR>1 {print $4}' output.csv) echo "$n, $c1" >> data.log ((n++)) done
关键说明
-F',':告诉Awk用逗号作为字段分隔符,这样$4就能正确对应CSV的第四列。NR>1:如果你的output.csv第一行是标题(比如id,col2,col3,value这类格式),加上这个条件可以跳过标题行,只取数据行的第四列;如果没有标题行,直接去掉NR>1即可。- 用
$(...)替代反引号`...`:这是更现代的命令替换写法,可读性更强,能避免嵌套场景下的语法问题。
内容的提问来源于stack exchange,提问作者Ga3258
相关产品推荐
相关产品推荐

