linux – 如何通过读取多值分隔文件来编写单值行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 如何通过读取多值分隔文件来编写单值行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1285字,纯文字阅读大概需要2分钟。
内容图文
我有一个简单的问题,我相信大多数人都有这个答案.
我有一个带有以下数据的分隔文件:
server1;user1;role
server1;user2;role,role 2
server2;user1;role,role 2,role 3
请注意,角色“列”是逗号分隔的,可能还有使用空格的多值信息和名称,不同于以分号分隔和单值的文件的其余部分.
我需要将每个“角色”显示在不同的行中,但与服务器和用户信息相关.例如:
server1;user1;role
server1;user2;role
server1;user2;role 2
server2;user1;role
server2;user1;role 2
server2;user1;role 3
我不需要在一个服务器/用户线上拥有所有角色,而是每行需要一个角色.
你有什么建议在Bash脚本上创建吗?我尝试嵌套,同时读取组合,也尝试循环读取数组,但到目前为止,我无法完成(我知道可能我将不得不使用这些函数,但以不同的方式).
这是我一直在研究的Bash脚本:
#!/bin/bash
input="/file/input.csv"
output="/file/output.csv"
declare -a ARRAYROLES
while IFS=';' read -r f1 f2 f3
do
ARRAYROLES=($f3)
field1=$f1
field2=$f2
for element in "${ARRAYROLES[@]}"
do
echo "$field1;$field2;$element" >> "$output"
done
field1=''
field2=''
done < "$input"
这是我到目前为止的输出(非常接近但不够好):
server1;user1;role
server1;user2;role,role
server1;user2;2
server2;user1;role,role
server2;user1;2,role
server2;user1;3
请注意,角色“列”按空格划分(我确信这是因为读取数组的for元素语句)
任何想法将不胜感激.
问候,
安德烈斯.
解决方法:
更改
ARRAYROLES=($f3)
至
IFS=, read -ra ARRAYROLES <<< "$f3"
内容总结
以上是互联网集市为您收集整理的linux – 如何通过读取多值分隔文件来编写单值行全部内容,希望文章能够帮你解决linux – 如何通过读取多值分隔文件来编写单值行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。