Как читать переменные через запятую и добавлять их в строковый буфер в Unix - PullRequest
0 голосов
/ 12 сентября 2018

Я ищу вариант, чтобы прочитать переменную с разделенными запятыми полями (например, a,b,c,d,e,f) и сгенерировать из нее другую переменную (например: a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'). Я пробовал с подходом цикла «FOR», но в конце добавляется запятая. Например:

Var1=a,b,c,d,e,f

Ожидаемый результат:

Var2=a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'

for i in $(echo $Var1 | sed "s/,/ /g")
do
    Var2="$i"",'""$i""',"
fi
done

Я получаю Var2=a,'a',b,'b',c,'c',d,'d',e,'e',f,'f',, заканчивающийся запятой Есть ли хороший подход, чтобы сделать это без усложнения?

Спасибо DMP

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вот способ сделать это в sed.

$ var1="a,b,c,d,e,f,"
$ var2=$(sed -e "s/[a-z]/&,\'&\'/g" -e 's/,$//g' <<<"$var1")
$ echo $var2
a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'

Первый -e в sed повторяет отдельные символы, а затем следующий -e удаляет запятую ,.

Вышеуказанное не будет работать, если var1 содержит несколько символов между запятыми ,. Для этого используйте -E или regex вариант для sed

$ var1='abc,192,hk3,def,HoZ,'
$ var2=$(sed -E -e "s/[a-zA-Z0-9]+/&,\'&\'/g" -e 's/,$//g' <<<"$var1")
$ echo "$var2"
abc,'abc',192,'192',hk3,'hk3',def,'def',HoZ,'HoZ'
0 голосов
/ 12 сентября 2018

Вам придется так или иначе иметь дело с лишней запятой.

Вот что я бы предложил в качестве решения.Я также использую фактический массив, чтобы убедиться, что мы можем обрабатывать строки с пробелами:

#!/usr/bin/env bash

# Input variable
VAR1=a,b,c,d,e,f

# Read VAR1 into an array
IFS=',' read -r -a VAR1_ARRAY <<< ${VAR1}

VAR2=''

for EL in ${VAR1_ARRAY[@]}; do
  VAR2="${VAR2},${EL},'${EL}'"
done

# Remove a leading comma
VAR2=${VAR2:1:${#VAR2} - 1}

echo ${VAR2}

Вывод:

a,'a',b,'b',c,'c',d,'d',e,'e',f,'f'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...