replacement for cut --output-delimiter

17,451

Solution 1

What about using tr for this?

$ tr ',' '\n' <<< "$var"
hi
hello how
are you
doing

or

$ echo $var | tr ',' '\n'
hi
hello how
are you
doing

With :

$ sed 's/,/\n/g' <<< "$var"
hi
hello how
are you
doing

Or with :

$ awk '1' RS=, <<< "$var"
hi
hello how
are you
doing

Solution 2

Perhaps do it in itself?

var="hi,hello how,are you,doing"
printf "$var" | (IFS=, read -r -a arr; printf "%s\n" "${arr[@]}")
hi
hello how
are you
doing
Share:
17,451
Marcos
Author by

Marcos

I'm new to scripting (shell / batch) and I'm Loving it ! PS: I'm a computer geek and Vid game Freak!

Updated on July 25, 2022

Comments

  • Marcos
    Marcos almost 2 years

    I created a script that was using

    cut -d',' -f- --output-delimiter=$'\n'
    

    to add a newline for each command separated value in RHEL 5, for e.g.

    [root]# var="hi,hello how,are you,doing"
    [root]# echo $var
    hi,hello how,are you,doing
    [root]# echo $var|cut -d',' -f- --output-delimiter=$'\n'
    hi
    hello how
    are you
    doing
    

    But unfortunately when I run the same command in Solaris 10, it doesn't work at all :( !

    bash-3.00# var="hi,hello how,are you,doing"
    bash-3.00# echo $var
    hi,hello how,are you,doing
    bash-3.00# echo $var|cut -d',' -f- --output-delimiter=$'\n'
    cut: illegal option -- output-delimiter=
    
    usage: cut -b list [-n] [filename ...]
           cut -c list [filename ...]
           cut -f list [-d delim] [-s] [filename]
    

    I checked the man page for 'cut' and alas there is no ' --output-delimiter ' in there !

    So how do I achieve this in Solaris 10 (bash)? I guess awk would be a solution, but I'm unable to frame up the options properly.

    Note: The comma separated variables might have " " space in them.

  • Marcos
    Marcos over 10 years
    Somehow I'm feeling like a BIG DUMBO!!! I never thought of using 'tr' or 'sed'...pfffttt..... Thanks a lot for the answer!
  • Marcos
    Marcos over 10 years
    'sed' didn't work, bash-3.00# echo $var|sed -e 's/,/\n/g' hinhello hownare youndoing but 'tr' worked!
  • Marcos
    Marcos over 10 years
    thanks for the answer, but I would prefer something smaller also I would like not to use an array for this.
  • fedorqui
    fedorqui over 10 years
    Uhms I don't have a Solaris server to test, but maybe in stackoverflow.com/questions/8991275/… you can find some clues. And good to read tr was fine for you :)