2012-03-05 2 views
0

позволяет сказать, что я использовал grep и разрезал для хранения данных в переменных. Мне нужно получить первые второе и третье значения каждой переменной, объединенной друг с другом. Я думаю, мне нужно использовать массивы для достижения этого, но я не знаю, как это сделать. например, если $ one содержит b c, а $ two имеет значение 1 2 3, а три три x x z, я хочу объединить, чтобы мой вывод выглядел как a1x b2y c3z. как я сказал, я думаю, что мне нужно сохранить мой grep/cut вывод в массив, но я не уверен, как это сделать. Благодарю.bash: объединение первого значения нескольких переменных

+0

это задание домашнее задание ? – Eddie

+0

Да, это домашнее задание. i grep файла и вырезать определенные символы из вывода grep. – user1248799

ответ

1

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

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

спасибо. Я получил его, чтобы работать с массивами, хотя, так как я разместил вопрос. – user1248799

+0

Прохладный, рад, что все получилось! –

0

Вы можете использовать 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 

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

+0

Что делают 3 <символы после \ n? – user1248799

+0

'<<<' is [Here Strings] – kev

0

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

$ 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

Pure оргии с использованием массива:

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

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

v1="a b c" 
v2="1 2 3" 
v3="x y z" 
parallel --xapply echo {1}{2}{3} ::: $v1 ::: $v2 ::: $v3 
a1x 
b2y 
c3z 
Смежные вопросы