Вывод на печать в вертикальном формате для bash с эхом - PullRequest
2 голосов
/ 27 февраля 2020

У меня определены 3 переменные и я использую echo для отображения вывода. Но вывод выводится в одну строку, ожидаемый вывод - боковой.

a=$(ps -ef | grep java) 
b=$(ps -ef | grep http)  
c=$(ps -ef | grep php)
echo $a $b $c

Вывод:

java1 java2 java3 java4 http1 http2 http3 http4 php1 php2 php3 php4

Ожидаемый результат

 java1 http1 php1
 java2 http2 php2 
 java3 http3 php3  
 java4 http4 php4

также используется паста, как показано ниже, но это не работает. Использование ОС Solaris

paste <(echo $ a) <(echo $ b) <(echo $ c) </p>

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Используя paste в процессе подстановки, вы можете сделать что-то вроде этого:

paste <(pgrep java) <(paste <(pgrep http) <(pgrep php))

ps -ef на большинстве Unix вариантов дает многостолбцовый вывод, а не только один столбец.

Используя ps -ef, вы можете сделать это:

paste <(ps -ef | grep -o java) <(paste <(ps -ef | grep -o http) <(ps -ef | grep -o php))
1 голос
/ 27 февраля 2020

Как насчет

for s in $a $b $c
do
    echo $s
done

И если вам не нужны переменные позже, я бы просто написал

for w in java http php
do
    ps -ef | grep -F -- "$w"
done
1 голос
/ 27 февраля 2020

Как-то так может помочь

#!/bin/bash

a='java1 java2 java3 java4'
b='http1 http2 http3 http4'
c='php1  php2  php3  php4'
a=($a)
b=($b)
c=($c)

for i in ${!a[@]}; {
    echo ${a[$i]} ${b[$i]} ${c[$i]}
}

Использование

$ ./test 
java1 http1 php1
java2 http2 php2
java3 http3 php3
java4 http4 php4
...