【问题标题】:Convert CSV to array in Bash在 Bash 中将 CSV 转换为数组
【发布时间】:2025-12-18 19:05:01
【问题描述】:

我有一个 CSV,每行有 2 个 IP。我想组合由*** 分隔的 2 个 IP 并填充到一个数组中。我尝试了下面的代码,但我只得到了最后一行。

#!/bin/bash

INPUT="IPPairs.csv"
array=()

while IFS="," read var1 var2 ; do
        echo $var1 $var2
        pairString="$var1***$var2"
        array+=($pairString)
done < $INPUT

echo "${array[@]}"

【问题讨论】:

  • 工作对我来说很好。 IPPairs.csv 中的 IP 地址是用逗号分隔的吗?例如,考虑在array+=("$pairString") 中添加一些双引号。但是使用直接的 IP 地址,你应该没问题。如果其中有带有反斜杠的域名,您可能需要使用read -r 以避免混淆

标签: arrays bash csv


【解决方案1】:

除非您的输入文件包含除, 以外的其他内容作为分隔符,否则您的代码应该可以工作。不过,您可以缩短它(需要 Bash 4.0 或更高版本):

mapfile -t array < IPPairs.csv
array=("${array[@]/,/***}")

第一个命令将文件读入一个数组,第二个命令将每个数组元素中的, 替换为***

【讨论】: