2013-10-14 6 views
0

Я прочитал некоторые данные из файла, использовал grep для использования только двух столбцов и перенаправил вывод в переменную.Bash Scripting: редактировать вывод переменной

Мой сценарий выглядит следующим образом:

#!/bin/bash 
cat hosts.cfg | grep 'address\|host_name' | sed -e 's/\<address\>//g' | while read line; do 
     echo $line | sed 's/host_name//g' | sed -r 's/\s+//g' ; 
done 

Выход теперь выглядит примерно так:

Host1 
xx.xx.xx.xx 
Host2 
xx.xx.xx.xx 

Проблема заключается в том, что хозяева и изобр должны быть сохранены в массиве, а не файл!

Вывод должен выглядеть следующим образом:

Host1(tab)xx.xx.xx.xx 

Host2(tab)xx.xx.xx.xx 
+0

Выход? Я думал, ты сказал, что хочешь, чтобы он был переменным. –

+0

Как выглядит 'hosts.cfg'? Может быть более простое решение, чем ваши цепочки команд sed. – chepner

ответ

0

Вы можете использовать awk:

echo $output | awk 'NR%2{printf $0"\t";next;}1' 

Чтобы сохранить любую команду вывода, обернуть его в backticks или более новую (но менее обратную совместимость) замену стиля $ (команды). Например .:

result=`echo $output | awk 'NR%2{printf $0"\t";next;}1'` 
+0

Он должен быть сохранен в памяти, а не только напечатан. –

+0

@DanCordos см. Обновленный ответ –

+0

Мой код выглядит следующим образом: 'cat hosts.cfg | grep 'address \ | host_name' | sed -e 's/\ // g' | при чтении строки; do echo $ line | sed 's/host_name // g' | sed -r 's/\ s + // g' | awk 'NR% 2 {printf $ 0 "\ t"; next;} 1'; done 'Он возвращает это: Host1 xx.xx.xx.xx Host2 xx.xx.xx.xx.Что мне нужно, чтобы перечислить их в одной строке следующим образом: Host1 xx.xx.xx.xx (newline) Host2 xx.xx.xx.xx. –

1

Вы ищете подстановки процессов. $(command), или старый стиль в ` s.

(простите, описание того, как он должен работать не достаточно ясно для меня, чтобы показать модифицированную версию кода)

0

с помощью sed 'N;s/\n/\t/g'

изменение

Host1 
xx.xx.xx.xx 
Host2 
xx.xx.xx.xx 

в

Host1(tab)xx.xx.xx.xx 
Host2(tab)xx.xx.xx.xx 
0

Вы можете использовать "набор", чтобы получить быстрее OUTPUT

EXG:

У меня есть best2 файл,

# cat best2 
Host1 xx.xx.xx.xx Host2 xx.xx.xx.xx 

сделать скрипт: tabcheck.sh

# cat tabcheck.sh 
#!/bin/bash 
out=$(cat best2) 
set $out 
echo -e "$1\t$2\n$3\t$4" 

# ./tabcheck.sh 
Host1 xx.xx.xx.xx 
Host2 xx.xx.xx.xx 

Если вы используете команду сдвига (обычно только аргументы девять командной строки можно получить с помощью позиционных параметров. Команда shift дает доступ к аргументам командной строки больше девяти, сдвигая каждый из аргументов.).

Спасибо.

Смежные вопросы