3 Stimmen

Parsetextdateiverwendenawk

Ich möchte eine durch Leerzeichen getrennte Eingabetextdatei mit awk parsen. Die Spalte CODE kann mehr als eine Zeile für jede Gruppe haben. Ich würde jede Hilfe damit sehr schätzen.

LOCATION
SHANNON

GRUPPE  NUM  SCHALTER  CODE HEX
0      4     AUS    1    3
1      13    EIN     2    4      
                    8
                    14

LOCATION
LOUTH

GRUPPE  NUM  SCHALTER  CODE HEX 
0      1    AUS     1    4
1      2    EIN      0    F
                    2

Gewünschte Ausgabedatei

LOCATION GRUPPE  NUM  SCHALTER  CODE HEX
SHANNON   0     4    AUS     1    3
SHANNON   1     13   EIN      2    4  
SHANNON   1     13   EIN      8    4  
SHANNON   1     13   EIN      14   4 
LOUTH     0     1    AUS     1    4
LOUTH     1     2    EIN      0    F
LOUTH     1     2    EIN      2    F

5voto

konsolebox Punkte 66082
#!/usr/bin/awk -f

BEGIN {
    # Sie können dies anpassen, um Ihr Ausgabeformat basierend auf Ihren Präferenzen zu ändern.
    format = "%-10s%-7s%-5s%-8s%-5s%-3s\n"
    printf format, "ORT", "GRUPPE", "NUM", "SCHALTER", "CODE", "HEX"
}
++i==2{
    l = $1
}
i>4{
    if (/^[[:blank:]]*$/) {
        i = 0
    } else if (NF > 1) {
        printf format, l, $1, $2, $3, $4, $5
        p1=$1; p2=$2; p3=$3; p5=$5
    } else {

        printf format, l, p1, p2, p3, $1, p5
    }
}

Ausführen mit:

awk -f script.awk file

Ausgabe:

ORT       GRUPPE  NUM  SCHALTER CODE HEX
SHANNON   0      4    AUS    1    3  
SHANNON   1      13   AN     2    4  
SHANNON   1      13   AN     8    4  
SHANNON   1      13   AN     14   4  
LOUTH     0      1    AUS     1    4  
LOUTH     1      2    AN     0    F  
LOUTH     1      2    AN     2    F

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X