Pivot data using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Pivot data using awk
# 1  
Old 05-19-2016
Pivot data using awk

Hi

My Input is like below

Code:
DELETE|MPI|AUD_UPD_AGENT|MPISYS
INSERT|MPI|AUD_UPD_AGENT|MPISYS
SELECT|MPI|AUD_UPD_AGENT|MPISYS
UPDATE|MPI|AUD_UPD_AGENT|MPISYS
DELETE|MPI|BDYMOD|MPISYS
INSERT|MPI|BDYMOD|MPISYS
SELECT|MPI|BDYMOD|MPISYS
UPDATE|MPI|BDYMOD|MPISYS
DELETE|MPI|BDYMOD_DESC|MPISYS
INSERT|MPI|BDYMOD_DESC|MPISYS
SELECT|MPI|BDYMOD_DESC|MPISYS
UPDATE|MPI|BDYMOD_DESC|MPISYS
DELETE|MPI|BUZZ_DESC|MPISYS
INSERT|MPI|BUZZ_DESC|MPISYS
SELECT|MPI|BUZZ_DESC|MPISYS
UPDATE|MPI|BUZZ_DESC|MPISYS
DELETE|temp|BUZZ_MOD|MPISYS
INSERT|temp|BUZZ_MOD|MPISYS
SELECT|temp|BUZZ_MOD|MPISYS
REFERENCES|temp|BUZZ_MOD|MPISYS

The output should be

Code:
Schema|Table|Select|Insert|Update|Delete|REFERENCES
MPI|AUD_UPD_AGENT|Yes|Yes|Yes|Yes|NO
MPI|BDYMOD|Yes|Yes|Yes...				
MPI|BDYMOD_DESC|..				
MPI|BUZZ_DESC|..				
temp|BUZZ_MOD|..

# 2  
Old 05-19-2016
And your awk script? What did it produce?
# 3  
Old 05-19-2016
Code:
awk -F"|" '
{ o[$2 FS $3]=1; p[$2 FS $3 FS $1]=1; }
END {
   t="SCHEMA|TABLE|SELECT|INSERT|UPDATE|DELETE|REFERENCES"
   print t; n=split(t, a, FS);
   for (i in o) {
      l="";
      for (j=3; j<=n; j++) l=l FS ((p[i FS a[j]]) ? "Yes" : "No");
      print i l;
   }
}
' infile


Last edited by rdrtx1; 05-19-2016 at 05:49 PM..
This User Gave Thanks to rdrtx1 For This Post:
# 4  
Old 05-20-2016
Could you please explain how it works
# 5  
Old 05-20-2016
Hello dineshaila,

Following may help you in same.
Code:
awk -F"|" '                                                          ##### Setting up the field seprator to pipe(|) as per your Input_file.
{ o[$2 FS $3]=1; p[$2 FS $3 FS $1]=1; }                              ##### creating an array named o whose index is $2 and $3 whose value is 1 and an another array whose name is p with indexs $2, $3 and $1 and value is 1.
END {                                                                ##### END section starts here.
   t="SCHEMA|TABLE|SELECT|INSERT|UPDATE|DELETE|REFERENCES"           ##### mentioning a variable t whose value is "SCHEMA|TABLE|SELECT|INSERT|UPDATE|DELETE|REFERENCES"
   print t; n=split(t, a, FS);                                       ##### printing value of t and spliting the variable t into an array named a whose field seprator is pipe(|).
   for (i in o) {                                                    ##### starting for loop for array named o.
      l="";                                                          ##### nullyfing variable l here.
      for (j=3; j<=n; j++) l=l FS ((p[i FS a[j]]) ? "Yes" : "No");   ##### starting for loop from j's value 3 to till value of variable n, where n is the number of fields of variable named t. Now setting up value of l, value of array p is present for this then l's value should be yes or it should be no.
      print i l;                                                     ##### printing the value of variable i and then variable l.
   }
}
' Input_file                                                         ##### mentioning the Input_file name here.

Thanks,
R. Singh
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Pivot example

Hi all, I am new to shell scripting so pardon me for the questions I will be asking. I was given a task where I have to pivot my data Example Source SGPAPCTUMACCHEA Expected output SGP APC TUM SGP APC ACC SGP APC HEA Can anybody assist me on this?Please use CODE tags as required... (3 Replies)
Discussion started by: redaela
3 Replies

2. Shell Programming and Scripting

Awk- Pivot Table Averages

Hi everyone, Has anyone figured out yet how to do pivot table averages using AWK. I didn't see anything with regards to doing averages. For example, suppose you have the following table with various individuals and their scores in round1 and round2: SAMPLE SCORE1 SCORE2 British ... (6 Replies)
Discussion started by: Geneanalyst
6 Replies

3. UNIX for Beginners Questions & Answers

Data Pivot

Good Day, I have file input 6285296582710|20170509|INDOTEL 6285296835209|20170509|INDOTEL 6285296940311|20170509|INDOTEL 6285297027737|20170509|MULTIFLAG 6285297027737|20170509|DELTA 6285297304373|20170510|INDOTEL 6285297384129|20170510|INDOTEL 6285296940311|20170510|MULTIFLAG... (2 Replies)
Discussion started by: radius
2 Replies

4. Shell Programming and Scripting

UNIX command to pivot data

Input data Output Required Tried this but not giving right results: nawk -F"|" '{for (i=1;i<=NF;i++) print $NF}' filename Please help me fix this. And also explain the logic how you did it so, I can do it next time. Thanks for your help. (2 Replies)
Discussion started by: pinnacle
2 Replies

5. Shell Programming and Scripting

Pivot Column using awk

Hello everyone I have a 20M file which is having the below sample layout 1111,ABC,100 1111,DEF,200 1111,XYZ,300 4444,LMN,100 4444,AKH,500 4444,WCD,400 2222,ABC,100 7777,DEF,300 7777,WCD,300 I need to covert this to below format Output Party_ID|ABC|AKH|DEF|LMN|WCD|XYZ... (5 Replies)
Discussion started by: morbid_angel
5 Replies

6. Shell Programming and Scripting

Pivot using awk

Hi, I am writing a code to basically pivot the data. awk -v var1="" -v var2="" -v var3="" -v var4="" -v var5="" -v Disp=0\ 'BEGIN {FS=":"; OFS="|";}\ /^Pattern1/ {var1=$2;Disp=0;} \ /^Pattern2/ {var2=$2;} \ /^Pattern3/ {var3=$2;} \ /^Pattern4/ {var4=$2;} \ /^Pattern5/... (5 Replies)
Discussion started by: tostay2003
5 Replies

7. Shell Programming and Scripting

awk --> math-operation in data-record and joining with second file data

Hi! I have a pretty complex job - at least for me! i have two csv-files with meassurement-data: fileA ...... (2 Replies)
Discussion started by: IMPe
2 Replies

8. Shell Programming and Scripting

Help with parsing data with awk , eliminating unwanted data

Experts , Below is the data: --- Physical volumes --- PV Name /dev/dsk/c1t2d0 VG Name /dev/vg00 PV Status available Allocatable yes VGDA 2 Cur LV 8 PE Size (Mbytes) 8 Total PE 4350 Free PE 2036 Allocated PE 2314 Stale PE 0 IO Timeout (Seconds) default --- Physical volumes ---... (5 Replies)
Discussion started by: rveri
5 Replies

9. Shell Programming and Scripting

Pivot script

Hi Please suggest a script that would do a horizontal pivot , on the fields separated by a semicolon Below is my input file 1|c2|aa 1|c3|dd 1|c4|cc 1|c5|aa 1|c6|ss 1|c7|dd 1|c8|bb 1|c9|jjj 1|c10|kkk 1|c11|fffg 1|c12|nnn;indi;pak;linf;wer 1|c13|lllnk;li;sdfsd;oiuo 1|c14|ppp... (5 Replies)
Discussion started by: mabarif16
5 Replies

10. Shell Programming and Scripting

pivot

I have a sql table with : Acitvity Date Value ABC 7/11 10 DEF 7/11 98 ABC 7/12 23 DEF 7/12 100 SER 7/12 67 GRH 7/13 123 HJY 7/14 12 I... (4 Replies)
Discussion started by: mukhanj
4 Replies
Login or Register to Ask a Question