Bash-基于解析的CSV的可变大小写语句选项?

时间:2019-02-07 04:47:32

标签: linux bash shell menu

好吧,我很困惑,但是肯定可以。.

假设您有如下所示的options.csv

ID, option
1, something
2, something else
3, you get the point
4, fin

我想将这些项目解析为case语句中的用户可选项目,从而使该语句在CSV发生更改时实质上是可变的。我想我可以使用read和IFS =来解析文件,但是我不知道如何将解析后的内容转换为用户可选菜单。

用bash这样的事情有可能吗?我当然认为是这样,但是我对如何实现一无所知。如果CSV的ID列与case语句的选择输入相匹配,则将获得奖励。

@Cyrus使我步入正轨。

像这样?虽然我知道语法已关闭:

#read csv file to an array and ignore header
mapfile -t array < <(awk -F ', ' 'NR>1{print $2}' $file)

    #Use array to map values to selection menu
    select name in "${array[@]}";do echo "$name" >> item.list; done
    cat $sysBanner > itemMenu && cat item.list >> itemMenu && echo -e "\n\n" >> itemMenu
    cat itemMenu
    read -p "Item to select:  "
    case $itemSelected in

            @)    echo -e "\nOK, $name selected.\n"
            sleep 1 && clear
            componentName=$name
            ;;
            * )     echo "invalid selection. Please try again."
            ;;
    esac

1 个答案:

答案 0 :(得分:1)

使用bash和awk:

# Read data to an array and ignore header
mapfile -t array < <(awk -F ', ' 'NR>1{print $2}' file.csv)

# Use array with select command
select name in "${array[@]}"; do echo "$name"; done

输出:

1) something
2) something else
3) you get the point
4) fin
#? 

我假设文件中的数字始终以1开头,并以升序排序。