Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

parse text file using awk

Tags:

linux

awk

I am looking to parse a space delimited input text file using awk. The column code can have more than one row for each group. I would greatly appreciate any help with this.

LOCATION
SHANNON

GROUP  NUM  SWITCH  CODE HEX
0      4     OFF    1    3
1      13    ON     2    4      
                    8
                    14

LOCATION
LOUTH

GROUP  NUM  SWITCH  CODE HEX 
0      1    OFF     1    4
1      2    ON      0    F
                    2

Desired output file

LOCATION GROUP  NUM  SWITCH  CODE HEX
SHANNON   0     4    OFF     1    3
SHANNON   1     13   ON      2    4  
SHANNON   1     13   ON      8    4  
SHANNON   1     13   ON      14   4 
LOUTH     0     1    OFF     1    4
LOUTH     1     2    ON      0    F
LOUTH     1     2    ON      2    F
like image 398
Santosh Pillai Avatar asked Jun 29 '26 20:06

Santosh Pillai


1 Answers

#!/usr/bin/awk -f

BEGIN {
    # You can customize this to change your output layout based on your preference.
    format = "%-10s%-7s%-5s%-8s%-5s%-3s\n"
    printf format, "LOCATION", "GROUP", "NUM", "SWITCH", "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
    }
}

Run with:

awk -f script.awk file

Output:

LOCATION  GROUP  NUM  SWITCH  CODE HEX
SHANNON   0      4    OFF     1    3  
SHANNON   1      13   ON      2    4  
SHANNON   1      13   ON      8    4  
SHANNON   1      13   ON      14   4  
LOUTH     0      1    OFF     1    4  
LOUTH     1      2    ON      0    F  
LOUTH     1      2    ON      2    F  
like image 198
konsolebox Avatar answered Jul 01 '26 20:07

konsolebox



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!