Eng.Fouad Eng.Fouad - 6 months ago 22
Bash Question

How to split a list by comma not space

I want to split a text with comma

,
not space
in
for foo in list
. Suppose I have a CSV file
CSV_File
with following text inside it:

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


I used following code to split it into several words:

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


It prints:

Hello
World
Questions
Answers
bash
shell
script


But I want it to split the text by commas not spaces:

Hello
World
Questions
Answers
bash shell
script


How can I achieve this in bash?

mkj mkj
Answer

Using a subshell substitution to parse the words undoes all the work you are doing to put spaces together.

Try instead:

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

That also increases parallelism. Using a subshell as in your question forces the entire subshell process to finish before you can start iterating over the answers. Piping to a subshell (as in my answer) lets them work in parallel. This matters only if you have many lines in the file, of course.

Comments