need awk or sed help to reformat output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting need awk or sed help to reformat output
# 8  
Old 07-12-2012
With a single awk:

Code:
awk -F_ '{
host[$4]=$1
inst[$4]=$2
dirs[$4]=dirs[$4]?dirs[$4]","$3:$3} END{
for(i in host) printf("Time: %s\tHost: %s\tInstance: %s\tDirs: %s\n",i,host[i],inst[i],dirs[i])}' inputfile

This User Gave Thanks to elixir_sinari For This Post:
# 9  
Old 07-17-2012
Thanks to all again... when blank dir is found, replace with "***", for example:

Code:
Time: 20120620133029   Host: server1   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120620133031   Host: server2   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120630011207   Host: server1   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120630011209   Host: server2   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120710005004   Host: server1   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120710005006   Host: server2   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120711122243   Host: server1   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120711122245   Host: server2   Instance: J00   Dirs: data,igs,j2ee,sec
Time: 20120711131819   Host: server1   Instance: J00   Dirs: data,igs,j2ee,****
Time: 20120711131821   Host: server2   Instance: J00   Dirs: data,igs,j2ee,sec

I got it to work by adding another awk statement:
Code:
awk 'BEGIN{OFS=FS=","}$4==""{$4="****"}{print}'

But what if it's another field, how can I make the awk statement more generic to detect blank fields in the dirs list, assuming the expected list is "data,igs,j2ee,sec"

Please advise.

---------- Post updated at 11:56 AM ---------- Previous update was at 11:41 AM ----------

Actually I found a better way of doing this.. since I don't need the entries with missing dir, I'm using this awk statement instead:

Code:
awk '/data,igs,j2ee,sec/ {print $0}'

but now I have to figure out on how to include 3 patterns to grep but using awk:
pattern1=data,igs,j2ee,sec
pattern2=cluster,data,igs,j2ee,sec
pattern3=SDM,j2ee

awk is freaking awksome!

---------- Post updated at 12:03 PM ---------- Previous update was at 11:56 AM ----------

feeling like an awk-xpert these days, NOT but getting there thanks to this forum..

Code:
awk '/data,igs,j2ee,sec|cluster,data,igs,j2ee,sec|SDM,j2ee/ {print $0}'

awk rawks!
# 10  
Old 07-18-2012
awk

Code:
awk -F'_' '{
    if(_[$NF] != ""){
    _[$NF]=sprintf("%s\n                     %s_%s_%s",_[$NF],$1,$2,$3)
    }
    else{
        _[$NF]=$1"_"$2"_"$3
    }
}
END{
    for(i in _)
    {
        print i
        print "                     "_[i]
    }
}' a

# 11  
Old 07-19-2012
Ran into a bug where the awk can't handle duplicate timestamp value, e.g.:

expected this:
Code:
Time: 20120719121947    Host: server0  Instance: J00   Dirs: j2ee
Time: 20120719121947    Host: server1  Instance: J00   Dirs: j2ee

but it only shows this:
Code:
Time: 20120719121947    Host: ddaap021  Instance: J00   Dirs: j2ee,j2ee

---------- Post updated at 09:46 AM ---------- Previous update was at 09:19 AM ----------

Fixed by adding another previous line check as follows:
Code:
      awk 'BEGIN {
                   FS = "_"
                   fmt = "%s\tTime: %s  Host: %s  Instance: %s  Dirs: "
                 }
                 {
                   if ($1 != prev1 || $4 != prev4 ) {
                   printf fmt, (dirs?dirs ORS:"\n"), $4, $1, $2
                   prev1 = $1
                   prev4 = $4
                   dirs = $3
                   } else {
                   dirs = dirs "," $3
                   }
                 }
      END {print dirs}'

Yeay!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to reformat output if input file is empty, but not if file has data in it

The below awk improved bu @MadeInGermany, works great as long as the input file has data in it in the below format: input chrX 25031028 25031925 chrX:25031028-25031925 ARX 631 18 chrX 25031028 25031925 chrX:25031028-25031925 ARX 632 14... (3 Replies)
Discussion started by: cmccabe
3 Replies

2. Shell Programming and Scripting

Reformat awk output

I need to rearrange the output but i am unable to arrange it to match the format. In the output i need NAME=\"To in the column . Bash: #!/bin/bash cd /cygdrive/c/output/a cat *.txt > output.txt i=/cygdrive/c/output/a/output.csv #echo "NE_Name, Source, Destination, OSPF_AREA_ID"... (4 Replies)
Discussion started by: adgjmpt
4 Replies

3. Shell Programming and Scripting

Alter awk script to reformat output

Data: 0,mfrh_green_screen,1455432969,37540,/prod/test/system/sys/unikixmain.log,3.0M,mfrh_green_screen,3120660,0,36964--37540 0,mfrh_green_screen,1455433269,38100,/prod/test/system/sys/unikixmain.log,3.1M,mfrh_green_screen,3164223,0,37540--38100... (1 Reply)
Discussion started by: SkySmart
1 Replies

4. Shell Programming and Scripting

Using awk to reformat file output

Hi there. I need to reformat a large file. Here is a sample of the file. NETIK0102_UCS_Boot_a,NETIK0102_UCS_Boot_b 5200 2438 70G 5200 2439 70G NETIK0102_UCS_HBA0_a,NETIK0102_UCS_HBA1_b,NETIK0102_UCS_HBA2_a,NETIK0102_UCS_HBA3_b 2673 19D7 55G 2673 19C0 30G 2673 19F5 120G... (5 Replies)
Discussion started by: kieranfoley
5 Replies

5. Shell Programming and Scripting

Use search pattern to reformat the output

I have below file listing ] ls -1 *.txt MISTradesReport_141105_d130240_VOLCKER_EMEA_LOANIQ_FEED_2013-12-24.txt MISTradesReport_141106_d130240_VOLCKER_NA_LOANIQ_FEED_2013-12-24.txt MISTradesReport_141107_d130240_VOLCKER_EMEA_CDS_CRDI_FEED_2013-12-24.txt... (4 Replies)
Discussion started by: krg.sati
4 Replies

6. Shell Programming and Scripting

awk reformat file

Hello: When I tried a perl-oneliner to re-format fasta file. infile.fasta >YAL069W-1.334 Putative promoter CCACACCACACCCACACACC ACACCACACCCACACACACA ACAGCCCTAATCTAACCC >YAL068C-7235.2170 Putative ABC sequence TACGAGAATAATTT ACGTAAATGAAGTT TATATATAAA >gi|31044174|gb|AY143560.1|... (15 Replies)
Discussion started by: yifangt
15 Replies

7. Shell Programming and Scripting

awk to reformat text

I have this input and want output like below, how can I achieve that through awk: Input: CAT1 FRY-01 CAT1 FRY-04 CAT1 DRY-03 CAT1 FRY-02 CAT1 DRY-04 CAT2 FRY-03 CAT2 FRY-02 CAT2 DRY-01 FAT3 DRY-12 FAT3 FRY-06 Output: category CAT1 item FRY-01 (7 Replies)
Discussion started by: aydj
7 Replies

8. UNIX for Advanced & Expert Users

Script to reformat output

Hi colleagues, I have the followind script. db2 -x "select substr(TBSPACE,1,20) TABLESPACE from syscat.tables where tabschema = 'SCHEMA' and tabname like '%XXXX' group by TBSPACE order by TBSPACE" | awk '{print $1}' | while read tablespace do db2 "list tablespaces show detail" |grep -p -w... (5 Replies)
Discussion started by: systemoper
5 Replies

9. UNIX for Advanced & Expert Users

reformat ps output

I often use "ps -ef" command to list all running processes. Now i want to customize the output to show only 2 parts: CMD and UID as below: /bin/bash /usr/bin/run-parts /etc/cron.weekly root /usr/sbin/httpd apache /usr/sbin/httpd apache /usr/sbin/httpd apache I use ps -ef | awk '{print $8"... (3 Replies)
Discussion started by: fongthai
3 Replies

10. Shell Programming and Scripting

reformat date, awk and sed

The command below is getting me the output I need. awk -F"," ' { if ($6 = 475) print "@@"$3 " " "0000" $10 "0" $1 "00000000" $8}' ${DIR1}${TMPFILE1} | sed -e 's/@@1//g' > ${DIR2}${TPRFILE} Output: 900018732 00004961160200805160000000073719 Now I need to incorporate... (5 Replies)
Discussion started by: mondrar
5 Replies
Login or Register to Ask a Question