Ich habe die unten genannten Daten.
host_name Server1.domain.com
contacts DL - Desktop
contact_groups ravi, raj, rahim
host_name Server2.domain.com
contact_groups DL-Server
host_name Server3.domain.com
host_name Server4.domain.com
contacts Services,helpdesk,manager
Die erforderliche Ausgabe ist unten.
host_name Server1.domain.com, contacts ravi,raj,rahim, Contact_group DL-Desktop
host_name Server2.domain.com contact_groups DL - Server
host_name Server3.domain.com
host_name Server4.domain.com contacts services,helpdesk,manager
Antwort1
Ich bin sicher, dass Sie es viel einfacher in awk machen können, aber awk mag mich nicht besonders, also ist hier meine Version davon, bei der ich alles außer der Küchenspüle verwende. Angenommen, die Daten befinden sich in einer Datei namens file1
export output=; while read line; do if [[ "$line" =~ "host_name" ]]; then export output="${output}\n"; fi; export output="${output}, $line"; done < file1 && echo -e $output | sed 's/^, \?//' | sed '/^$/d'
Inhalt von Datei1
host_name Server1.domain.com
contacts ravi, raj, rahim
contact_groups DL - Desktop
host_name Server2.domain.com
contact_groups DL-Server
host_name Server3.domain.com
host_name Server4.domain.com
contacts Services,helpdesk,manager
Ausgabe des obigen Befehls
host_name Server1.domain.com, contacts ravi, raj, rahim, contact_groups DL - Desktop
host_name Server2.domain.com, contact_groups DL-Server
host_name Server3.domain.com
host_name Server4.domain.com, contacts Services,helpdesk,manager
Antwort2
$ sed -e '2,$ s/^host_name/\n&/' ravi.txt |
perl -n -e 'if (! m/^$/) {
chomp;
$line .= $_ . ", "
};
if (m/^$/ || eof) {
$line =~ s/ +/ /g; # merge multiple spaces into one space
$line =~ s/, $//; # strip the trailing comma
print $line,"\n" ;
$line=""
}'
host_name Server1.domain.com, contacts DL - Desktop, contact_groups ravi, raj, rahim
host_name Server2.domain.com, contact_groups DL-Server
host_name Server3.domain.com
host_name Server4.domain.com, contacts Services,helpdesk,manager
Verwenden Sie es zunächst sed
, um die Eingabe in Absätze umzuwandeln (durch eine neue Zeile getrennt). perl
Fügen Sie dann die Zeilen in jedem Absatz zusammen und drucken Sie sie aus.
Dies könnte vollständig in Perl erfolgen, aber ich war faul und entschied, dass es einfacher wäre, es einfach in Absätze umzuwandeln, bevor ich es in ein einfaches Perl-Skript weiterleite.