Formatierung der Shell-Skript-Ausgabe

Formatierung der Shell-Skript-Ausgabe

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 awkLösung:

awk 'NF==4 && NR>1 {printf "\n" ; } 
     NF==4 { printf "%-10s %s",$1,$3} 
     NF==2 { printf ",%s",$1} 
     END   { printf "\n" ; } '

Wo

  • NFist die Feldnummer (Spaltennummer),
  • NRist die Nummer des Datensatzes (Zeilennummer),
  • verschiedene Bedingungen wählen aus, was gedruckt werden soll,
  • printfdruckt 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.

verwandte Informationen