如何根据数据集变量值命名文件?Bash脚本实现问题求助
原脚本存在的问题
- 没有对逐行读取的内容做列拆分,
$column1/$column2/$column3/$column4均为未定义的空变量,开头定义的file1/file2也完全无效 - 创建目录没有加
-p参数,不仅会在目录已存在时报错,也无法直接创建多级嵌套目录 - 完全没有实现「将第2列内容写入第1列命名的文件、存放到第3列目录下」的核心逻辑,仅打印了整行内容
- 没有对变量加引号,若列值包含空格等特殊字符时会执行报错
修正后的脚本
首先确认你的list.csv的列分隔符:
如果是空格/制表符分隔的列表,使用以下脚本:
#!/bin/bash while read -r column1 column2 column3 column4 leftover do # 一次性创建两级目录,已存在也不会报错 mkdir -p "${column3}/${column4}" # 将第二列内容写入对应文件 echo "${column2}" > "${column3}/${column1}" done < list.csv
如果是逗号分隔的标准CSV,修改IFS指定分隔符即可:
#!/bin/bash while IFS=, read -r column1 column2 column3 column4 leftover do mkdir -p "${column3}/${column4}" echo "${column2}" > "${column3}/${column1}" done < list.csv
注:变量后的
leftover用于承接行内超过4列的冗余内容,避免列数超出时内容错位。如果你的文件严格只有4列可以删掉这个参数。
内容的提问来源于stack exchange,提问作者user17135844
相关产品推荐
相关产品推荐

