我有一个带有字符串的变量,如下所示
name=@col1, zip_cd=@col2, district=@col3, city=@col4
列列表可能会增加。
我需要以下输出
@col1,@col2,@col3,@col4
答案1
如果您的唯一目标是打印变量的所有值(即字面意思@col1,@col2,@col3,@col4
),请使用数组:
$ array=($name $zip_cd $district $city)
输出:
$ oIFS="$IFS" # save IFS for later
$ IFS=","
$ echo ${array[*]}
@col1,@col2,@col3,@col4
$ IFS="$oIFS"`enter code here`
如果您希望将列加载到变量中,则打印它们:
$ line="foo bar qaz qux"
$ oIFS="$IFS" # save IFS for later
$ IFS=" " # space, if $line has spaces/tabs, convert them into single spaces below
$ line=`sed 's/\s\+/ / <<< $line`
$ array=($line)
$ IFS="," # for display
$ echo ${array[*]}
foo,bar,qaz,qux
答案2
$ myvar='name=@col1, zip_cd=@col2, district=@col3, city=@col4'
$ echo $myvar
name=@col1, zip_cd=@col2, district=@col3, city=@col4
$ echo $myvar | awk -F, '{for(i=1;i<=NF;i++){split($i,a,"=");printf("%s,",a[2])}}'
@col1,@col2,@col3,@col4
答案3
您可以使用awk
:
echo "name=@col1, zip_cd=@col2, district=@col3, city=@col4" | awk 'BEGIN{FS="[^=,]*=";OFS=""} {$1=$1}1'
字段分隔符FS
设置在结构的左侧key=value
,包括=
标志。
输出字段分隔符为空,因为值后面已有逗号。
正在{$1=$1}
触发awk
将FS
和应用于OFS
整个记录。
最后,1
触发 awk 中的默认操作:打印记录。
答案4
重击
VAR='name=@col1, zip_cd=@col2, district=@col3, city=@col4'
echo "$VAR" |
while IFS= read -r line
do
IFS='=,'; set -f; set -- $line
while case $# in 0 ) break ;; esac
do
shift
printf '%s' "${1}${2+,}"
shift
${1+':'} echo
done
done
塞德
echo "$VAR" |
sed -ne '
H;g
:loop
s/\(\n\)[^=]*=\([^,]*,\{0,1\}\)/\2\1/
tloop
P
'
珀尔
echo "$VAR" |
perl -F'/=|,/' -lpe '
$_ = join ",", grep { $a++ % 2 } @F;
'