2010-06-11 7 views
2

У меня есть две переменные var1 и var2. Содержимое каждой переменной происходит из команды grep команды bash.Как вставить новую строку в оболочку bash для переменной?

echo $var1 печатает
123 465 326 8080

echo $var2 печатает
sila kiran hinal juku

Теперь я хочу, чтобы напечатать выше в следующих форматах в Linux Баш оболочки

 
123 sila 
465 kiran 
326 hinal 
8080 juku 

Так как я могу напечатать этот путь в оболочке bash?

+0

Не могли бы вы отступа выходных частей с 4 пробелами? Я думаю, у вас многострочные строки, а теперь все отображается на одной строке. Отступ в 4 пробелах помещает его в форматирование кода –

+0

, вероятно, используя команду 'join', за исключением того, что мне нужно будет увидеть, как создавались $ var1 и $ var2. – msw

ответ

1

Без цикла:

$ var1="123 465 326 8080" 
$ var2="sila kiran hinal juku" 
$ var1=($var1); var2=($var2) 
$ saveIFS=IFS 
$ IFS=$'\n' 
$ paste <(echo "${a[*]}") <(echo "${b[*]}" 
$ IFS=$saveIFS 

С петлей (предполагается, что две строки имеют одинаковое количество слов):

$ var1="123 465 326 8080" 
$ var2="sila kiran hinal juku" 
$ var2=($var2) 
$ for s in $var1; do echo $s ${vars[i++]}; done 
2

о чем?

$ paste -d" " <(echo $var1 | xargs -n1) <(echo $var2 | xargs -n1) 

Мы можем даже пропустить эхо:

$ paste -d" " <(xargs -n1 <<< $var1) <(xargs -n1 <<< $var2) 
0

Я бы хранить их в массивы $var1[] и $var2[] вместо некоторой длинной строки, а затем перебирать массивы с петлей на выходе это так, как вы хотите.

Если вы не хотите использовать массивы использования, вы можете использовать awk и итератор из цикла, чтобы распечатывать имена по одному.

0
join <(echo $var1 | sed -r 's/ +/\n/g' | cat -n) <(echo $var2 | sed -r 's/ +/\n/g' | cat -n) -o "1.2,2.2" 
1

Использование дескрипторов файлов и While-цикл:

var1="123 465 326 8080" 
var2="sila kiran hinal juku" 

IFS=" " exec 7< <(printf "%s\n" $var1) 8< <(printf "%s\n" $var2) 

while read -u7 f1 && read -u8 f2; do 
    echo "$f1 $f2" 
done 
Смежные вопросы