
Ich habe eine Datei im folgenden Format -
root 0 system 0
bin 2
sys 3
security 7
cron 8
audit 10
lp 11
daemon 1 staff 1
bin 2 bin 2
sys 3
adm 4
sys 3 sys 3
Und möchte es mithilfe eines Shell-Skripts in eine neue Datei mit folgendem Format konvertieren:
root system,bin,sys,security,cron,audit,lp
daemon staff
bin bin,sys,adm
sys sys
Antwort1
Eine sofort einsatzbereite awk
Lösung:
awk 'NF==4 && NR>1 {printf "\n" ; }
NF==4 { printf "%-10s %s",$1,$3}
NF==2 { printf ",%s",$1}
END { printf "\n" ; } '
Wo
NF
ist die Feldnummer (Spaltennummer),NR
ist die Nummer des Datensatzes (Zeilennummer),- verschiedene Bedingungen wählen aus, was gedruckt werden soll,
printf
druckt keine nachfolgende neue Zeile.
Antwort2
perl -lane '
if ( @F == 4 ) { # num fields are 4
print $result if $. > 1; # in case we"re not @ BOF, show result
$result = join "\t", @F[0,2]; # initialize result
} else {
$result .= ",$F[0]"; # append result
}
eof && print $result; # on the last line, show result
' filename
Antwort3
perl -0pe 's/\h+\d+\h*\n\h+/,/g; s/\h+\d+//g' ex
- erste Ersetzung ersetzt Zahlen, gefolgt von
\n...spaces
durch,
- Die zweite Substitution entfernt die anderen Zahlen.