如何用逗号而不是空格分割列表

新手上路,请多包涵

我想用逗号分隔文本 , 而不是空格 `infor foo in list。假设我有一个 CSV 文件CSV_File` 里面有以下文本:

 Hello,World,Questions,Answers,bash shell,script
...

我使用以下代码将其拆分为几个单词:

 for word in $(cat CSV_File | sed -n 1'p' | tr ',' '\n')
do echo $word
done

它打印:

 Hello
World
Questions
Answers
bash
shell
script

但我希望它用逗号而不是空格分割文本:

 Hello
World
Questions
Answers
bash shell
script

如何在 bash 中实现这一点?

原文由 Eng.Fouad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

使用 subshell 替换来解析单词会撤消您将空格放在一起所做的所有工作。

请尝试:

 cat CSV_file | sed -n 1'p' | tr ',' '\n' | while read word; do
    echo $word
done

这也增加了并行性。在您的问题中使用子外壳会强制整个子外壳过程完成,然后您才能开始迭代答案。管道到子外壳(如我的回答)让它们并行工作。当然,这仅在文件中有很多行时才重要。

原文由 mkj 发布,翻译遵循 CC BY-SA 3.0 许可协议

IFS 设置为 ,:

 sorin@sorin:~$ IFS=',' ;for i in `echo "Hello,World,Questions,Answers,bash shell,script"`; do echo $i; done
Hello
World
Questions
Answers
bash shell
script
sorin@sorin:~$

原文由 Sorin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏