bash: объединение первого значения нескольких переменных - PullRequest
0 голосов
/ 05 марта 2012

Допустим, я использовал grep и cut для хранения данных в переменных. Мне нужно получить первое второе и третье значения каждой переменной, объединенные друг с другом. я думаю, что мне нужно использовать массивы для достижения этой цели, но я не знаю, как это сделать. например, если $ one содержит a b c, а $ two - 1 2 3, а $ three - x y z, я хочу объединить, чтобы мой вывод выглядел как a1x b2y c3z. Как я уже сказал, я думаю, что мне нужно сохранить мой вывод grep / cut в массив, но я не уверен, как это сделать. Спасибо.

Ответы [ 5 ]

1 голос
/ 05 марта 2012

В чистом bash вы можете сделать что-то вроде этого:

v1="a b c"
v2="1 2 3"
v3="x y z"
for v in v1 v2 v3; do
  read p1 p2 p3 <<< ${!v}
  a1="$a1$p1" 
  a2="$a2$p2" 
  a3="$a3$p3" 
done
echo $a1 
echo $a2 
echo $a3

Последние три вывода эхо-сигналов:

a1x
b2y
c3z
0 голосов
/ 05 марта 2012

Это может работать для вас:

v1="a b c"
v2="1 2 3"
v3="x y z"
parallel --xapply echo {1}{2}{3} ::: $v1 ::: $v2 ::: $v3
a1x
b2y
c3z
0 голосов
/ 05 марта 2012

Чистый bash с использованием массива:

declare -a a=( $v1 $v2 $v3 )

echo "${a[0]}${a[3]}${a[6]}"
echo "${a[1]}${a[4]}${a[7]}"
echo "${a[2]}${a[5]}${a[8]}"
0 голосов
/ 05 марта 2012

Другое решение в чистом bash с использованием массива:

$ arr=( $v1 $v2 $v3 )

$ for ((i=0; i<3; i++)); do
    for ((j=i; j<${#arr[@]}; j+=3)); do printf '%s' ${arr[j]}; done
    echo
 done

a1x
b2y
c3z
0 голосов
/ 05 марта 2012

Вы можете использовать sed, tr и т. Д. Для перевода ' ' в '\n'.
Затем используйте paste, чтобы объединить их по вертикали.

$ v1="a b c"
$ v2="1 2 3"
$ v3="x y z"

$ paste <(tr ' ' '\n' <<<$v1) <(tr ' ' '\n' <<<$v2) <(tr ' ' '\n' <<<$v3) | tr -d '\t'
a1x
b2y
c3z

Или

$ paste <(echo "${v1// /$'\n'}") <(echo "${v2// /$'\n'}") <(echo "${v3// /$'\n'}") | tr -d '\t'
a1x
b2y
c3z

Примечание: Если вы сохраните их в отдельных файлах, это будет намного проще.

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