steve ecott
steve ecott

Reputation: 1

How do I reformat file in linux using AWK, Print

I have a input file like this.

axoradev05.hs.pru.com /dev/fslv20   1502.00 1174.80  327.20 79% /ora01/STAGE82A 
axoradev05.hs.pru.com /dev/fslv21   1820.00 1438.35  381.65 80% /ora01/STAGE52A
axoradev05.hs.pru.com /dev/fslv22    750.00  494.48  255.52 66% /ora01/STAGE62A
axoradev05.hs.pru.com /dev/fslv23   1500.00 1049.42  450.58 70% /ora01/STAGE72A 
axoradev06.production.local /dev/fslv17 642.00  554.23  87.77   87%  /ora01/MART54A 
axoradev10.production.local
axoradev11.production.local /dev/fslv08  30.00    7.39  22.61   25%  /ora01/BOARD01A 
axoradev13.production.local
axoramis01a.hs.pru.com /dev/ora01_lv58 1648.00  1413.70  234.30   86% /ora01/BUOMI01P 
axoramis01a.hs.pru.com /dev/ora01_lv44 1345.00  1104.90  240.10   83% /ora01/CSREC01P 
axoramis01a.hs.pru.com /dev/ora01_lv14  150.00    13.75  136.25   10% /ora01/INRP102P

I want it to then look like this.

               axoradev05
/dev/fslv20     1502.00   1174.80    327.20      79% /ora01/STAGE82A
/dev/fslv21     1820.00   1438.35    381.65      80% /ora01/STAGE52A
/dev/fslv22      750.00    494.48    255.52      66% /ora01/STAGE62A
/dev/fslv23     1500.00   1049.42    450.58      70% /ora01/STAGE72A
                   axoradev06
/dev/fslv17      642.00    554.23     87.77      87% /ora01/MART54A
                   axoradev10
                   axoradev11
/dev/fslv08       30.00      7.39     22.61      25% /ora01/BOARD01A
                   axoradev13
                   axoramis01
/dev/ora01_lv58   1648.00   1413.70    234.30      86% /ora01/BUOMI01P
/dev/ora01_lv44   1345.00   1104.90    240.10      83% /ora01/CSREC01P
/dev/ora01_lv14    150.00     13.75    136.25      10% /ora01/INRP102P
i.e remove column 1 but use first 10 characters as a heading using awk,print,printf

This is the script that creates the file and the what I am currently doing

# COLLECT THE DATA
##################
/opt/local/sbin/pcmdrun -o aix "df -Pg" > /tmp/bifsize1 |
# FORMAT THE DATA
#################
awk 'NF>1{ printf "%18s %8s %6s %8s %8s \n", $7, $3, $6, $4, $5 }' /tmp/bifsize1 >> 
/tmp/bifsize.`date +'%Y%m%d'`.txt

Upvotes: 0

Views: 65

Answers (1)

Ed Morton
Ed Morton

Reputation: 204731

Here's how to do what you asked for given your intermediate file in your question as input:

$ cat tst.awk
{ server = substr($0,1,10) }
server != prev {
    print "\t" server
    prev = server
}
sub(/[^[:space:]]+[[:space:]]+/,"")

$ awk -f tst.awk file
        axoradev05
/dev/fslv20   1502.00 1174.80  327.20 79% /ora01/STAGE82A
/dev/fslv21   1820.00 1438.35  381.65 80% /ora01/STAGE52A
/dev/fslv22    750.00  494.48  255.52 66% /ora01/STAGE62A
/dev/fslv23   1500.00 1049.42  450.58 70% /ora01/STAGE72A
        axoradev06
/dev/fslv17 642.00  554.23  87.77   87%  /ora01/MART54A
        axoradev10
        axoradev11
/dev/fslv08  30.00    7.39  22.61   25%  /ora01/BOARD01A
        axoradev13
        axoramis01
/dev/ora01_lv58 1648.00  1413.70  234.30   86% /ora01/BUOMI01P
/dev/ora01_lv44 1345.00  1104.90  240.10   83% /ora01/CSREC01P
/dev/ora01_lv14  150.00    13.75  136.25   10% /ora01/INRP102P

Upvotes: 1

Related Questions