如何读取CSV首列路径,通过awk批量提取对应文件指定值的Shell方案
调整后的完整脚本
#!/bin/bash # 清空历史结果,避免重复追加 > result.csv # 提取Sampleinput.csv第一列的所有路径,逐行处理 awk -F ',' '{print $1}' Sampleinput.csv | while read -r path do # 提取路径对应的文件名,不需要额外调用echo var2="${path##*/}" # 调整awk实现,解决原语法问题同时优化执行逻辑 var3=$(awk -v target_fname="$var2" '{ for(i=1;i<NF;i++) { if ($i == target_fname) { print $(i+1) # 找到第一个匹配项直接退出,不需要额外head -1 exit } } }' "$path") echo "done,$var3" >> result.csv done
核心修改说明
- 替换原手动输入逻辑:直接通过
awk -F ','指定CSV分隔符为逗号,提取第一列的路径作为输入,无需手动输入记录数和路径 - 修复原awk语法错误:原代码中if判断后多写了一个闭合大括号,会导致执行报错,本次一并修正
- 优化变量传递方式:通过awk的
-v参数将shell中的文件名变量传入awk内部,避免字符串拼接可能导致的特殊字符解析异常,兼容性更好 - 兼容带空格的路径:给路径变量增加引号包裹,避免路径存在空格时脚本执行失败
执行效果
使用提供的测试用例执行后,result.csv输出和预期完全一致:
done,120 done,0
内容的提问来源于stack exchange,提问作者Helium
相关产品推荐
相关产品推荐

