首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell脚本读取CSV文件(跳过标头)

Shell脚本读取CSV文件(跳过标头)
EN

Stack Overflow用户
提问于 2021-10-07 15:24:39
回答 1查看 49关注 0票数 0

我有以下SH脚本读取test.csv文件,但它不是打印命令,我所期待的。请帮帮忙

代码语言:javascript
复制
read header
while IFS="," read -r user role
do
    echo "btp assign security_role-collection $role --to-user $user"
    
done
} < test.csv

test.csv文件记录如下

代码语言:javascript
复制
user,role
test1@yahoo.com,testrole1
test2@yahoo.com,testrole2

我得到的结果是:

代码语言:javascript
复制
 --to-user test1@yahoo.comollection testrole1
 --to-user test2@yahoo.comollection testrole2
btp assign security_role-collection  --to-user

但我期望的是下面的结果。我做错了什么?

代码语言:javascript
复制
btp assign security_role-collection  testrole1 --to-user test1@yahoo.com
btp assign security_role-collection  testrole2 --to-user test2@yahoo.com
EN

回答 1

Stack Overflow用户

发布于 2021-10-07 17:35:50

当您读取此行test1@yahoo.com,testrole1并且该行的行尾为\r\n时,$role的值为testrole1\r

您创建的字符串如下所示

代码语言:javascript
复制
btp assign security_role-collection testrole1\r --to-user test1@yahoo.com
.............................................^^

当您打印它时,回车键将光标移动到第一列。

你想要的

代码语言:javascript
复制
{
read header
while IFS="," read -r user role
do
    echo "btp assign security_role-collection ${role%$'\r'} --to-user $user"
    # ........................................^^^^^^^^^^^^^
done
} < test.csv

代码语言:javascript
复制
{
read header
while IFS="," read -r user role
do
    echo "btp assign security_role-collection $role --to-user $user"
done
} < <(sed 's/\r$//' test.csv)
# ..^^^^^^^^^^^^^^^^^^^^^^^^^
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69483765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档