开发者社区> 问答> 正文

如何从包含特定字符串模式的行中提取第一个参数

我有一个名为mail_status.txt的文件。文件的内容如下。

1~auth_flag~
2~download_flag~
3~copy_flag~
4~auth_flag~
5~auth_flag~
6~copy_flag~

我想对该文件执行一些操作,以便最后我应该获得三个变量,并且它们各自的值应如下所示:

auth_flag_ids="1,4,5"
download_flag_ids="2"
copy_flag_ids="3,6"

我对这种语言很陌生。如果需要更多详细信息,请告诉我。

谢谢

展开
收起
祖安文状元 2020-01-08 15:08:48 386 0
1 条回答
写回答
取消 提交回答
  • 如果要bash基于文件内容生成变量,请尝试以下操作:

    # read the file and extract information line by line
    declare -A hash                     # delcare hash as an associative array
    while IFS= read -r line; do
        key="${line#*~}"                # convert "1~auth_flag~" to "auth_flag~"
        key="${key%~*}_ids"             # convert "auth_flag~" to "auth_flag_ids"
        hash[$key]+="${line%%~*},"      # append the value to the hash
    done < "mail_status.txt"
    
    # iterate over the hash to create variables
    for r in "${!hash[@]}"; do          # r is assigned to "auth_flag_ids", "download_flag_ids" and "copy_flag_ids" in tern
        printf -v "$r" "%s" "${hash[$r]%,}"  # create a variable named "$r" and assign it to the hash value by trimming the trailing comma off
    done
    
    # check the result
    printf "%s=\"%s\"\n" "auth_flag_ids" "$auth_flag_ids"
    printf "%s=\"%s\"\n" "download_flag_ids" "$download_flag_ids"
    printf "%s=\"%s\"\n" "copy_flag_ids" "$copy_flag_ids"
    
    

    首先,它读取文件的各行,并逐行提取变量名称和值。它们存储在关联数组中hash。 接下来,迭代键的hash名称以创建名称为“ auth_flag_ids”,“ download_flag_ids”和“ copy_flag_ids”的变量。 printf -v var创建一个变量var。该机制对于引起对变量的间接引用很有用。

    2020-01-08 15:08:56
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载