在Shell脚本中将逗号分隔的字符串拆分为数组值?

3

我的数据集(data.txt)看起来像这样 [图像ID,会话ID,高度1,高度2,x,y,裁剪]:

1,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,0
2,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,0
3,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,0
4,0c66824bfbba50ee715658c4e1aeacf6fda7e7ff,1296,4234,194,1536,950

以下是我希望使用的一组数值。我对shell脚本不太熟悉 :) 我可以像这样逐行读取文件,

cat $FILENAME | while read LINE
do
string=($LINE)
# PROCESSING THE STRING
done

现在,在上面的代码中,获取字符串后,我希望执行以下操作: 1. 将字符串拆分为逗号分隔的值。 2. 将这些变量存储到像imageID [],sessionID []这样的数组中。
我需要访问这些值以使用imagemagick进行图像处理。但是,我无法正确执行上述步骤。
2个回答

6

set -A 对我不起作用(可能是因为我在OSX上使用了较旧的BASH)

如果有人需要,可以发布使用read -a的替代解决方案:

# init all your individual arrays here
imageId=(); sessionId=();

while IFS=, read -ra arr; do
    imageId+=(${arr[0]})
    sessionId+=(${arr[1]})
done < input.csv

# Print your arrays
echo "${imageId[@]}"
echo "${sessionId[@]}"

整洁的解决方案满足了我大部分的需求!非常感谢! - anirudh_raja
2
你能不能把循环头改成 while IFS=, read -ra arr; do,然后把下一行删掉呢? - ooga
似乎初始化行imageId=(); sessionId=();也不是必要的。(虽然这样做也无妨!) - ooga

1
oIFS="$IFS"; IFS=',' 
set -A str $string
IFS="$oIFS"

echo "${str[0]}";
echo "${str[1]}";
echo "${str[2]}";

你可以这样拆分和存储
查看Unix数组的更多信息在这里

好的,你正在将字符串拆分并将它们存储在数组中。我如何将实体存储在不同的数组中?我想创建图像ID、会话ID等的数组。你能修改一下你的代码吗? - anirudh_raja
非常感谢您的帮助! - anirudh_raja
1
set -A 对我无效(没有 -A 选项可用于 set)。您链接的页面使用 declare - ooga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接