2013-11-25 13 views
5

Ho creato uno script che utilizzavasostituzione per taglio --output-delimitatore

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

aggiungere una nuova riga per ciascun valore separato comando in RHEL 5, per esempio

[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 

Ma purtroppo quando si esegue lo stesso comando di Solaris 10, non funziona affatto :(!

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] 

Ho controllato la pagina di manuale di 'tagliare' e purtroppo non c'è '--output-delimitatore' in là!

Allora, come faccio raggiungere questo obiettivo in Solaris 10 (bash)? Credo che awk sarebbe una soluzione, ma sono in grado di inquadrare le opzioni correttamente.

Nota: la virgola s Le variabili eparate potrebbero avere "" spazio in esse.

+0

Se si desidera che lo stesso comando taglio che hai su RHEL, installare il pacchetto [GNU coreutils] (https://www.gnu.org/software/coreutils/). – alanc

risposta

7

E a proposito di utilizzare tr per questo?

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

o

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

Con :

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

O con :

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

In qualche modo mi sento come un GRANDE DUMBO !!! Non ho mai pensato di usare 'tr' o 'sed' ... pfffttt ..... Grazie mille per la risposta! – Marcos

+0

'sed' non ha funzionato, bash-3.00 # echo $ var | sed -e 's /,/\ n/g' hinhello hownare youndoing ma 'tr' funzionato! – Marcos

+0

Uhms Non ho un server Solaris da testare, ma forse in http://stackoverflow.com/questions/8991275/escaping-newlines-in-sed-replacement-string puoi trovare alcuni indizi. E buona lettura 'tr' andava bene per te :) – fedorqui

3

Forse farlo in sé?

var="hi,hello how,are you,doing" 
printf "$var" | (IFS=, read -r -a arr; printf "%s\n" "${arr[@]}") 
hi 
hello how 
are you 
doing 
+0

grazie per la risposta, ma preferirei qualcosa di più piccolo anche io vorrei non usare un array per questo. – Marcos