2010-06-11 40 views
2

我有兩個變量var1和var2。每個變量的內容來自bash shell grep命令。如何在bash shell中爲變量插入新行?

echo $var1打印
123 465 326 8080

echo $var2打印
sila kiran hinal juku

現在我想上面打印到Linux中的bash以下格式外殼

 
123 sila 
465 kiran 
326 hinal 
8080 juku 

那麼,如何可以打印這種方式在bash shell?

+0

你能縮進與4位輸出部分?我認爲你有多行字符串,而現在的一切都顯示在一行上。 4空格縮進可以使用'join'命令將其編碼爲 – 2010-06-11 06:08:11

+0

,但我需要了解如何創建$ var1和$ var2。 – msw 2010-06-11 06:25:57

回答

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