Visit Our UNIX and Linux User Community


awk unable to print array next to each other


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers awk unable to print array next to each other
# 1  
Old 04-09-2020
awk unable to print array next to each other

Dear moderators/experts


I have below data as


Code:
   1631321 2020-04-06T23:59:58.256+0300  PL-15  ER: "vc_MessageInformation=SDA: Location information cannot be obtained; vc_AdditionalInfo=Reason: Unexpected Error from HLR, Message Type: Sh-Pull, User Identity Type: MSISDN; vc_Priority=LOG_ERR"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
   1631320 2020-04-06T23:59:51.390+0300  PL-9  ER: "vc_MessageInformation=SDA: User not defined in AS; vc_AdditionalInfo=Reason: ,Message Type: Sh-Notif, User Identity Type: Public Id,  Application Server Name: tpsps01.fmc.stc.com.sa; vc_Priority=LOG_ERR"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
   1631246 2020-04-06T23:56:23.561+0300  PL-6  ER: "vc_MessageInformation=SDA: SLh Service could not be processed correctly; vc_AdditionalInfo=Reason: User identity was not located in any serving node, Message Type: SLh LCS-Routing-Info, User Identity Type: IMSI; vc_Priority=LOG_ERR"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
   1631319 2020-04-06T23:59:51.080+0300  PL-7  ER: "vc_MessageInformation=SDA: Service could not be processed correctly; vc_AdditionalInfo=Reason: Database access failure, Message Type: Sh-Update, User Identity Type: Public Id; vc_Priority=LOG_ERR"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
   1631188 2020-04-06T23:54:18.454+0300  PL-9  ER: "vc_MessageInformation=SDA: AVP error; vc_AdditionalInfo=Reason: Missing AVP, Result Code: DIAMETER_MISSING_AVP, AVP name: User-Name, Message Type: Sh-Pull, User Identity Type: Public Id, vc_Priority=LOG_ERR"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
   1631276 2020-04-06T23:58:04.476+0300  PL-4  ER: "vc_MessageInformation=SDA: Invalid Sequence Number; vc_AdditionalInfo=Reason: ,Message Type: Sh-Update, User Identity Type: Public Id,  Sequence Number: 7344; vc_Priority=LOG_ERR"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
   1631014 2020-04-06T23:49:30.379+0300  PL-12  ER: "vc_MessageInformation=SDA: Inconsistency between user identities; vc_AdditionalInfo=Reason: User Identity does not correspond to Private identity, Message Type: Sh-Pull, Private Id: ; vc_Priority=LOG_ERR"




From the above print i want output as below


Code:
vc_MessageInformation                                   vc_AdditionalInfo                                                Result Code:      AVP name:            AVP name:  Message Type          Application Server Name
 Location information cannot be obtained          Unexpected Error from HLR                                                                Sh-Pull                                     
 User not defined in AS                                                                                                                    Sh-Notif             tpsps01.fmc.spp.com.sa
 SLh Service could not be processed correctly     User identity was not located in any serving node                                        SLh LCS-Routing-Info
 Service could not be processed correctly         Database access failure                                                                  Sh-Update
 AVP error                                        Missing AVP                                           DIAMETER_MISSING_AVP, User-Name    Sh-Pull                                                                                                                                   Sh-Update
 Invalid Sequence Number                                                                                                                   Sh-Pull
 Inconsistency between user identities            User Identity does not correspond to Private identity                                    Sh-P


This mean i want to store data in 6 arrays and want to print on screen one after another



I used below awk command


Code:
awk -F'[:;,"]' '/vc_MessageInformation/{print a["m"] " " a["n"] a["o"] a["p"] " " a["q"] " " a["r"];delete a}/vc_MessageInformation/{a["m"]=$6;next}/vc_AdditionalInfo/{a["n"]=$8;next}/Result Code/{if ($9=="Result Code") a["o"]=$10;else a["o"]="";next}/AVP name/{if ($11=="AVP name") a["p"]=$12;else a["p"]="";next}/Message Type/{if ($9=="Message Type") a["q"]=$10;else a["q"]=$14;next}/Application Server Name/{if ($16=="Application Server Name") a["r"]=$17;else a["r"]="";next}END{print a["m"] " " a["n"] a["o"] a["p"] " " a["q"] " " a["r"];}' SHAPP_HC_FIL


but output only print first array a["m"] whereas i want them to print in sequence a["m"]

" " a["n"] " " a["o"] " " a["p"] " " a["q"] " " a["r"]

Code:
 

Location information cannot be obtained
 User not defined in AS
 SLh Service could not be processed correctly
 Service could not be processed correctly
 AVP error
 Invalid Sequence Number
 Inconsistency between user identities


Thanks
# 2  
Old 04-10-2020
No surprise: the next statement after every single match stops processing the actual input line; you CANNOT print more that one item.
This User Gave Thanks to RudiC For This Post:
# 3  
Old 04-11-2020
Dear RudC,


Thnaks after removing next.. I got the desired output.


Code:
awk -F'[;,"]' '/vc_MessageInformation/{print a["m"] "," a["n"] "," a["o"] ",";delete a}/vc_MessageInformation/{a["m"]=$2}/Message Type/{if ($4 ~ "Message Type") a["n"]=$4;{if ($6 ~ "Message Type") a["n"]=$6}}/Message Type/{if ($6 ~ "User Id") a["o"]=$6 {if ($8 ~ "User Id") a["o"]=$8;{if($5 ~ "User Identity :") a["o"]=$5}}}END{print a["m"] "," a["n"] "," a["o"] ","}' SHAPP_HC_Log > SHAPP_OUTPUT

# 4  
Old 04-11-2020
Good to hear, although I'm getting a syntax error at or near { with your above code. After correction, the output doesn't quite look like the desired one in yur post #1.


Strong recommendation: Use - and stick to - a code structuring schema to your taste, like indenting and block building, for better readability, undaerstandability, and maintainability.


How about an approach like this one (adapt output field length if necessary):
Code:
awk '
BEGIN           {HCNT = split ("vc_MessageInformation|vc_AdditionalInfo|Result Code|AVP name|Message Type|Application Server Name", COLN, "|")
                 FMT  = "%-35.35s "
                 for (i=1; i<=HCNT; i++) printf FMT, COLN[i]
                 printf ORS
                }
                {for (i=1; i<=HCNT; i++)        {match ($0, COLN[i] "[^;,]*")
                                                 TMP = substr ($0, RSTART, RLENGTH)
                                                 sub (/^[^:]*: /, _, TMP)
                                                 printf FMT, TMP
                                                }
                 printf ORS
                } 
' file
vc_MessageInformation               vc_AdditionalInfo                   Result Code                         AVP name                            Message Type    ...
Location information cannot be obta Unexpected Error from HLR                                                                                   Sh-Pull         ...
User not defined in AS                                                                                                                          Sh-Notif        ...
SLh Service could not be processed  User identity was not located in an                                                                         SLh LCS-Routin  ...
Service could not be processed corr Database access failure                                                                                     Sh-Update       ...  
AVP error                           Missing AVP                         DIAMETER_MISSING_AVP                User-Name                           Sh-Pull         ...      
Invalid Sequence Number                                                                                                                         Sh-Update       ...
Inconsistency between user identiti User Identity does not correspond t                                                                         Sh-Pull         ...

# 5  
Old 04-11-2020
Thanks a lot RudC


Yes, Agreed from my version ,The achivement was partial then i used column command to realigned the column.


But this one really great.


Can you explain this code, So I can use it if similar kind of data processing needed.


regards,
Shanul

--- Post updated at 09:41 AM ---

Dear RudC,


Is it possible to insert extra column with your code which will count similar lines or similar lines in column. Like I am using seperate awk command as below.




Quote:
awk '( $1 ~ /^[A-Z]/ ) { newcol=T[$0]++; newpos=length } { printf "%*-s %s\n", newpos, $0, newcol }' OFS="," /local/hss_hc/$date/SHAPP_datalog > /local/hss_hc/$date/SHAPPTD_datalog



Output as below


Quote:
MessageInformation AdditionalInfo MessageType Count
Location information cannot be obtained Unexpected Error from HLR Sh-Pull(UDR MSG) 17841
User not defined in AS Sh-Notif(PNR MSG) 9415
SLh Service could not be processed correctly User identity was not located in any serving node SLh LCS-Routing-Info 1005
Service could not be processed correctly Database access failure Sh-Update(PUR MSG) 1484
AVP error Missing AVP DIAMETER_MISSING_AVP 2061
Invalid Sequence Number Sh-Update(PUR MSG) 1046
Inconsistency between user identities User Identity does not correspond to Private identity Sh-Pull(UDR MSG) 98
# 6  
Old 04-11-2020
It is possible, yes. Try



Code:
awk '
BEGIN           {HCNT = split ("vc_MessageInformation|vc_AdditionalInfo|Result Code|AVP name|Message Type|Application Server Name", COLN, "|")
                 TMP  = split ("40 40 22 12 16 25", FLEN) 
                 FMT  = "%-*.*s "
                 for (i=1; i<=HCNT; i++) printf FMT, FLEN[i], FLEN[i], COLN[i]
                 printf "Count" ORS
                }
                {OUT = ""
                 for (i=1; i<=HCNT; i++)        {match ($0, COLN[i] "[^;,]*")
                                                 TMP = substr ($0, RSTART, RLENGTH)
                                                 sub (/^[^:]*: /, _, TMP)
                                                 OUT = OUT sprintf (FMT, FLEN[i], FLEN[i], TMP)
                                                }
                 T[OUT]++
                } 
END             {for (t in T) print t, T[t]
                }
' file


It first gets the header and fields' definition into the COLS array, and the respective lengths into FLEN to be used when formatting the fields with the "dynamic" field wifth and precision specifiers in FMT. Then, the header is printed, supplemented by the "Count" field header.
In the main block, the actual line is searched, item by item, for the header keywords plus their values. The latter are extracted into a TMP variable and collected into the OUTput line. After the line is complete, a counter array is incremented.
In the END section, the counter array is printed, index (= output lines) first, then count values. Be aware that the order of the array element retrieval is undefined in awk.
# 7  
Old 04-11-2020
Thanks a lot RudC..


This will solve all my issue for using multiple awk liner to process the output.


From above description i got the idea in general.


But if you can explain code line by line.. I mean each variable and method. It will be grateful.
As i need to use similar for processing many different data files with different headers and columns.


Thanks again for this grateful help

Previous Thread | Next Thread
Test Your Knowledge in Computers #433
Difficulty: Easy
JSON, or JavaScript Object Notation, is a general-purpose data interchange format that is defined as a subset of JavaScript's object literal syntax.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Unable to print python array in shell script loop.

I am unable to loop print a python string array in my unix shell script: ~/readarr.sh '{{ myarr }}' more readarr.sh echo "Parameter 1:"$1 MYARRAY= $1 IFS= MYARRAY=`python <<< "print ' '.join($MYARRAY)"` for a in "$MYARRAY"; do echo "Printing Array: $a" done Can you... (10 Replies)
Discussion started by: mohtashims
10 Replies

2. Shell Programming and Scripting

awk to print array that occurs the most with matching value in another field

In the below awk I am splitting $7 on the : and then counting each line or NM_xxxx. If the $1 value is the same for each line then print the $7 that occurs the most with the matching $1 value. The awk seems close but I am not sure what is going on. I included a description as well as to what I... (1 Reply)
Discussion started by: cmccabe
1 Replies

3. Shell Programming and Scripting

Not getting array in .awk file and print it

I have test.sh file as below : set -A IDARR $ID echo | awk -f test.awk -v TempArr="${IDARR }" I have test.awk file as below : BEGIN { Flag = 1; } { print "Hello"; for(i in TempArr) { print i; } } (9 Replies)
Discussion started by: nes
9 Replies

4. UNIX for Dummies Questions & Answers

How To Print Array in awk?

Hello, May i please know how do i print the array using awk script. I am using below shell script to start with but not working. #!/bin/bash LOADSTATUS="Line 0" LOADSTATUS="Line 1" LOADSTATUS="Line 2" LOADSTATUS="Line 3" LOADSTATUS="Line 4" awk ' BEGIN { Your File Load Status }... (1 Reply)
Discussion started by: Ariean
1 Replies

5. Shell Programming and Scripting

Unable To access array in awk

Hi, i have the following code in which i am passing array tldn in awk using -v option & despite of that condition is not getting matched,can somebody suggest how to handle shell arrays in awk tcount=(9875 9667) awk -F"\t" -v ltldn="${tldn}" 'NR==FNR {POSTPAIDMDNS=$2"|"$3;next} ... (6 Replies)
Discussion started by: siramitsharma
6 Replies

6. Programming

Unable to assign zero to unsigned character array

Hi, I am unable to assign value zero to my variable which is defined as unsigned char. typedef struct ABCD { unsigned char abc; unsigned char def; unsigned char ghi; } ABCD; typedef ABCD *PABCD; In my Por*C code, i assign the values using memcpy like below ... (3 Replies)
Discussion started by: gthangav
3 Replies

7. Shell Programming and Scripting

Print array into a single file - AWK

Hi all, I been looking for a solution to the fact that when I use: for (i=1; i<=NF; i++) print $ifields that are originally in a single line are printed in a single line I have severals files for which the first 7 are the same, but the number of variables after that can vary, for example NF... (5 Replies)
Discussion started by: PaulaL
5 Replies

8. Shell Programming and Scripting

awk: reading into an array and then print the value corresponding to index

I am beginner in awk awk 'BEGIN{for(i=1;(getline<"opnoise")>0;i++) arr=$1}{print arr}' In the above script, opnoise is a file, I am reading it into an array and then printing the value corresponding to index 20. Well this is not my real objective, but I have posted this example to describe... (19 Replies)
Discussion started by: akshaykr2
19 Replies

9. Solaris

Unable to access 3500 FC array. Where is the problem?..

Hi, I have two Sun Fire V490 with Solaris 10 5/08, FC switch and two Sun StorageTek 3500 FC arrays. Each array is connected to switch and to one server at a time. In the last week I installed Solaris 10 5/08 on both servers and set up Sun Cluster, version 3.2. At wednesday all was fine - all... (7 Replies)
Discussion started by: Sapfeer
7 Replies

10. Shell Programming and Scripting

Unable to set a data to array

Hi All, Iam trying to set the value to the array... Still its not happening Following is the code: #!/usr/bin/ksh filenames="x"; filenames="y"; echo $filenames; echo $filenames; O/P: x x Iam expecting (2 Replies)
Discussion started by: kiranlalka
2 Replies

Featured Tech Videos