2010-06-11 7 views
2

J'ai deux variables var1 et var2. Le contenu de chaque variable provient de la commande bash shell grep.comment insérer une nouvelle ligne dans bash shell pour variable?

echo $var1 imprime
123 465 326 8080

echo $var2 impressions
sila kiran hinal juku

Maintenant, je veux imprimer ci-dessus dans des formats suivants shell bash Linux

 
123 sila 
465 kiran 
326 hinal 
8080 juku 

Alors, comment puis-je imprimer cette façon dans bash shell ??

+0

Pourriez-vous mettre en retrait les parties de sortie avec 4 espaces? Je pense que vous avez des chaînes multilignes, alors que tout est maintenant affiché sur une seule ligne. L'indentation de 4 espaces l'a mis en format de code –

+0

en utilisant probablement la commande 'join', sauf que j'ai besoin de voir comment $ var1 et $ var2 ont été créés. – msw

Répondre

1

Sans une boucle:

$ 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 

Avec une boucle (en supposant que les deux chaînes ont le même nombre de mots):

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

Qu'en est-il?

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

On peut même ignorer l'écho :

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

je les stocker dans des tableaux $var1[] et $var2[] au lieu d'une certaine chaîne longue et puis à travers les réseaux itérer avec une boucle de sortie comme tu veux.

Si vous ne voulez pas de tableaux d'utilisation, vous pouvez utiliser awk et l'itérateur depuis une boucle pour imprimer les noms un à la fois.

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

Utiliser les descripteurs de fichiers et une boucle 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 
Questions connexes