替换cut --output-delimiter

时间:2013-11-25 14:36:14

标签: bash awk solaris cut

我创建了一个使用

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

为RHEL 5中的每个命令分隔值添加换行符,例如

[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

但不幸的是,当我在Solaris 10中运行相同的命令时,它根本不起作用:(!

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]

我检查了手册页'cut',唉,那里没有'--output-delimiter'!

那么我如何在Solaris 10(bash)中实现这一目标呢?我想awk会是一个解决方案,但我无法正确构建选项。

注意:逗号分隔的变量可能包含“”空格。

2 个答案:

答案 0 :(得分:8)

如何使用tr呢?

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

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

使用

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

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

答案 1 :(得分:3)

或许可以在本身做到这一点?

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