【问题标题】:Splitting string separated by comma into array values in shell script?将逗号分隔的字符串拆分为shell脚本中的数组值?
【发布时间】:2014-08-16 03:57:31
【问题描述】:

我的数据集(data.txt)看起来像这样 [imageID,sessionID,height1,height2,x,y,crop]:

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 进行图像处理。 但是,我无法正确执行上述步骤

【问题讨论】:

    标签: arrays string shell unix awk


    【解决方案1】:

    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[@]}"
    

    【讨论】:

    • 简洁的解决方案涵盖了我的大部分需求!非常感谢!
    • 你不能把循环头while IFS=, read -ra arr; do,去掉下一行吗?
    • 看来初始化行imageId=(); sessionId=();也不是必须的。 (虽然它不会受伤!)
    【解决方案2】:
    oIFS="$IFS"; IFS=',' 
    set -A str $string
    IFS="$oIFS"
    
    echo "${str[0]}";
    echo "${str[1]}";
    echo "${str[2]}";
    

    你可以这样拆分和存储

    查看here 了解有关 Unix 数组的更多信息。

    【讨论】:

    • 好的,所以你拆分字符串并将它们存储在一个数组中。如何将实体存储在不同的数组中。我想创建 imageID 、 sessionID 等数组。你能修改你的代码吗?
    • 非常感谢您的帮助!
    • set -A 对我不起作用(set 没有-A 选项)。您链接到的页面使用declare
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2018-12-21
    相关资源
    最近更新 更多