在 Bash 中使用 CSV 文件

在 Bash 中使用 CSV 文件

希望使用一个 csv 文件,该文件使用标题作为每行都会更改的变量,但我想做一些简单的事情,例如while read -r在每行运行一个或 For 循环。在循环期间,我希望每个条目都是该特定变量。例如,生成csr文件。

CSV 会是这样的:

server alias cn san environment
server1,srv1,srv1.domain.com,"dns:srv1.coolstuff.org,dns:srv1.morecoolstuff.org:,production
server2,srv2,srv2.domain.com,"dns:srv2.dev.coolstuff.org,dns:srv2.dev.morecoolstuff.org",development

等等...会贯穿

keytool -gen blah blah 使用条目的每一行

有人有主意吗。我知道剥猫皮有 8000 种方法。

答案1

我通常用于csvtool在 bash 脚本中处理 CSV 文件。

像这样的事情应该做:

csvtool namedcol server,alias,cn,san,environment input.csv \
| csvtool -u TAB drop 1 - \
| while IFS=$'\t' read -r server alias cn san environment; do
   echo "server: ${server}"
   echo "alias: ${alias}"
   echo "cn: ${cn}"
   echo "san: ${san}"
   echo "environment: ${environment}"
   # do something with it...
   keytool -genkey -alias "${alias}" -keyalg RSA -keysize 2048
done

第一次调用csvtool根据名称输出 CSV 文件中的列,以防列的顺序不固定。

第二次调用去掉了 CSV 标头并进行了一些分隔符修改(使用“\t”而不是,,以防万一您的输入数据可能包含逗号,但不包含制表符。

然后,我们在read使用IFSenvvar 的调用中使用相同的分隔符;并用于read为变量名称赋值。

相关内容