2016-11-03 4 views
0

У меня есть выход из pdsh, я хочу отформатировать его для загрузки в БД. Мне нужно это в 3 столбцах и по существу хотите идентификатор модуля и сообщение в одной строке. Беллоу выход я есть:Форматирование вывода текста в Bash

10.125.45.58,scope, Module ID  = server-1 
10.125.45.58,scope, Message  = Correctable memory error 
10.125.45.58,scope, Module ID  = server-2 
10.125.45.58,scope, Message  = Correctable memory error 

Это выход мне нужно:

10.125.45.58,scope,server-1 Correctable memory error 
10.125.45.58,scope,server-2 Correctable memory error 

Я awking и seding ... я не могу работать это какие-нибудь идеи?

Вот что я сделал до сих пор

cat myfile.txt | sed -e "s/:/\,scope\,/g" | grep -E '(Module ID|Message)' 

Спасибо.

+3

Вы можете разместить '' awk' и sed' вы сделали до сих пор ? –

+0

Эй, спасибо ... У меня нет такой работы или даже близко, я уже создал исходный вывод из pdsh ... # cat myfile.txt | sed -e "s /:/\, scope \,/g" | grep -E '(ID модуля | Сообщение)'. –

ответ

1
$ cat ip.txt 
10.125.45.58,scope, Module ID  = server-1 
10.125.45.58,scope, Message  = Correctable memory error 
10.125.45.58,scope, Module ID  = server-2 
10.125.45.58,scope, Message  = Correctable memory error 

$ sed 'N; s/\n.*=//; s/ *Module ID.*= *//' ip.txt 
10.125.45.58,scope,server-1 Correctable memory error 
10.125.45.58,scope,server-2 Correctable memory error 
  • N получить следующую строку, так что подстановка работает на каждые две линии, которые считаются вместе
  • s/\n.*=//; удалить из новой строки к последнему =
  • s/ *Module ID.*= *// затем удалить все от Module ID ДО = с пробелами или вокруг
+0

Также спасибо за объяснение! Очень признателен! –

0

sed предназначен для простых подстановок на s единственные линии, вот и все. Для всего, что вы должны использовать AWK для переносимости, эффективности, простоты, ясности, ремонтопригодности, и большинство других желательных атрибутов программного обеспечения:

$ awk 'NR%2{srvr=$NF;next} {ip=$1; sub(/.*=/,""); print ip srvr $0}' file 
10.125.45.58,scope,server-1 Correctable memory error 
10.125.45.58,scope,server-2 Correctable memory error 
Смежные вопросы