Complex transpose awk script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Complex transpose awk script
# 15  
Old 01-21-2013
Hello again RudiC,

Thank you for your effort to help me!.

It seems to work, but only if file "tobe" has only one line to be compared and actually I need to compare 4 lines. The difference between 4 lines are highlighted in red.
Code:
x,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592403|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0
x,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592407|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0
x,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592408|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0
x,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592409|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0

In the 2nd script I was doing an OR within the IF like below:
Code:
if(x !~ /2\|15\|2038759581\|0\|2\|7,18\|15\|2038759594\|1\|2\|Y,18\|15\|2038759240(3|7|8|9)\|0\|30501201012120/) print $0, "Different"

I'm attaching a little bit greater sample, for which the output should be like below:
Code:
MSISDN,OCTDP,TCTDP,GPRSTDP,GCSO,MCSO,SSLO,GC2SO,MC2SO,TIF,GPRSSO,OSMSSO,GC3SO,MC3SO,GC4SO,MC4SO,MMSO,STATUS
20385503286,2|15|2038759581|0|2_I,18|15|2038759581|1|2|Y_I,_I,0,5,0,1,2,0,1,0,1,0_I,1,1_I,1_I,Different
20386671719,2|15|2038759581|0|2|7,18|15|2038759594|1|2|Y,18|15|20387592403|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0
20387323200,_I,18|15|2038759594|1|2|Y,18|15|20387592403|0|3,1,3,0,1,2,0,1,1,0,2,2,2,2,Different
20385503289,No_values
20386671088,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592408|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0
20386671452,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592407|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0
20386671490,|2|15|2038759581|0|2|7,|18|15|2038759594|1|2|Y,|18|15|20387592409|0|3,0,5,0,1,2,0,1,0,1,2,1,2,0

I hope is not to complicated for you to fix this part Smilie

Many thanks in advance.

Regards.
# 16  
Old 01-22-2013
Why don't you give it a trial yourself? Read n lines from tobe into a two dimensional array (split into tmp array, copy into 2dim array), and then, in the comparison part, replace the unequality test by a loop through the 2dim array's elements?
# 17  
Old 01-23-2013
Hello and thanks for your great help RudiC,

I'll try to get what you suggest me to add it in the script. I hope I can do it.

Thanks again for all support!

Regards
# 18  
Old 01-23-2013
If you encounter a problem, post your trial here so we can assist you to help yourself.
# 19  
Old 01-29-2013
Hello RudiC again!

I'm not sure how to load the array with more lines, it should be like this?

Code:
NR==FNR     {cnt[NR] = split ($0, Temp[NR], ","); next}

Maybe you can help me with how to load correctly the array and then I think I'll be in better way to insert it in comparison part.

Thanks for any help.

Regards
# 20  
Old 01-29-2013
Well, try it like (untested):
Code:
NR==FNR     {cnt[NR] = split ($0, tmp, ","); for (i=1;i<=cnt[NR]; i++) cmpAr[NR,i]=tmp[i]; next}

You now have the lines NR split into cmpAr [NR...] ready for the testing loop.
# 21  
Old 01-30-2013
Hello RudiC,

Thank you for your help!

I've done some testings to see what is inside cmpAr working only with tobe file. Now I'm trying to do the comparison loop, I got error with tmp using not as
matrix, then I change the second tmp to tmp1 but the output is not correct, I get more than 2300 fields for the sample I've posted (see the output attached).

I've done this:
Code:
awk 'BEGIN {split("OCTDP TCTDP GPRSTDP",TDPAr);
            print "MSISDN,OCTDP,TCTDP,GPRSTDP,GCSO,MCSO,SSLO,GC2SO,MC2SO,TIF,GPRSSO,OSMSSO,GC3SO,MC3SO,GC4SO,MC4SO,MMSO,STAT"
     }

    NR==FNR     {cnt[NR] = split ($0, tmp, ","); for (i=1;i<=cnt[NR]; i++) cmpAr[NR,i]=tmp[i]; Cn++; next}
     
     /^MSISDN/   {getline; rec=$0}
     /^TDPTYPE/  {noflds=0
                  while (1)
                     {getline; if ($0 ~ /^$/) break
                      OFS="|"; tmp1=$1; $1=""; sub("\|",""); tmpAr[tmp1]=$0; noflds=3 ;
                     }
                  for (i=1; i<=noflds; i++) rec=rec","tmpAr[TDPAr[i]]
                 }
     /^(GCSO|GC3SO|MMSO)/ {
                  getline; OFS=","; $1=$1; rec=rec","$0}
     /^NONE/     {getline; rec=rec ",no values"}
     /END/       {split (rec, tmpAr, ","); rec=tmpAr[1]
                  for (i=1;i<=Cn;i++) for (j=2;j<=cnt[i];j++) {if (tmpAr[i] != cmpAr[i,j]) {tmpAr[i]=tmpAr[i]"_I"; dif=1} rec=rec","tmpAr[i]}
                  if (dif) rec=rec",different"
                  print rec; rec=""; delete tmpAr; dif=0}
    ' tobe file

Almost sure that the problem is they way I'm doing the comparison loop, but I can't see the problem.

Any help would be very appreciated.

Regards
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Transpose table with awk

I am trying to format the table below to the output input: cand week sub1 sub2 sub3 sub4 joe 1 94.19 70.99 43.93 60.14 joe 2 94.07 51.02 41.07 38.92 joe 3 26.24 30.95 44.56 67.67 joe 4 72.36 60.92 40.78 83.25 joe 5 51 70.01 44.66 82.22... (7 Replies)
Discussion started by: aydj
7 Replies

2. Shell Programming and Scripting

Transpose rows to columns complex

Input: IN,A,1 IN,B,3 IN,B,2 IN,C,7 BR,A,1 BR,A,5 BR,C,9 AR,C,9 Output: CNTRY,A,B,C IN,1,5,7 BR,6,0,9 AR,0,0,9 (7 Replies)
Discussion started by: unme
7 Replies

3. Shell Programming and Scripting

Transpose using awk

Hi Friends, Very urgent requirement please do needful ASAP.. Input: |1||1|1||1|3||3|2||2|4||4|2||2|3||3|NA||0|5||5|NA||0|4||4|3||3 output: |1||1 |1||1 |3||3 |2||2 |4||4 |2||2 |3||3 |NA||0 |5||5 (4 Replies)
Discussion started by: bharat1211
4 Replies

4. Shell Programming and Scripting

Transpose data as rows using awk

Hi I have below requirement, need help One file contains the meta data information and other file would have the data, match the column from file1 and with file2 and extract corresponding column value and display in another file File1: CUSTTYPECD COSTCENTER FNAME LNAME SERVICELVL ... (1 Reply)
Discussion started by: ravlapo
1 Replies

5. Shell Programming and Scripting

awk to transpose every 7 rows into columns

input: a1 a2 a3 a4 a5 a6 a7 b1 b2 b3 .. b7 .. z1 .. z7 (12 Replies)
Discussion started by: ux4me
12 Replies

6. Shell Programming and Scripting

Complex match of numbers between 2 files awk script

Hello to all, I hope some awk guru could help me. I have 2 input files: File1: Is the complete database File2: Contains some numbers which I want to compare File1: "NUMBERKEY","SERVICENAME","PARAMETERNAME","PARAMETERVALUE","ALTERNATENUMBERKEY"... (9 Replies)
Discussion started by: Ophiuchus
9 Replies

7. Shell Programming and Scripting

awk script (complex)

picked this up from another thread. echo 1st_file.csv; nawk -F, 'NR==FNR{a++;next} a{b++} END{for(i in b){if(b-1&&a!=b){print i";\t\t"b}else{print "NEW:"i";\t\t"b} } }' OFS=, 1st_file.csv *.csv | sort -r i need to use the above but with a slight modification.. 1.compare against 3 month... (25 Replies)
Discussion started by: slashbash
25 Replies

8. Shell Programming and Scripting

How can i transpose this rerult by using awk?

From>>> ATOM 1 ca 2 o 3 h 4 h 5 o dE/dx 0.2057422D-01 0.2463722D-01-0.1068047D-01-0.1495280D-01-0.3725362D-02 dE/dy -0.7179106D-02-0.1554542D-01 0.1016889D-01 0.3268502D-02-0.4888578D-01 dE/dz -0.5600872D-02 0.3110649D-01-0.4088230D-02-0.2295107D-01-0.2832048D-01 ATOM 6 h 7 h 8 o 9 h 10 h... (1 Reply)
Discussion started by: wanchem
1 Replies

9. Shell Programming and Scripting

Transpose using awk

I have a requirement to transpose the below xml which is in a text file on unix: <?xml version="1.0" ?> <REQUEST> <ID>XXX</ID> <TIMESTAMP>20090720062610</TIMESTAMP> <FLAG>Y</FLAG> <TO_FLAG>Y</TO_FLAG> </REQUEST> to <?xml version="1.0"... (13 Replies)
Discussion started by: new_ds_man
13 Replies

10. Shell Programming and Scripting

How to transpose data elements in awk

Hi, I have an input data file :- Test4599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,2,Rain Test90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,Not Rain etc.... I wanted to transpose these data to:-... (2 Replies)
Discussion started by: ahjiefreak
2 Replies
Login or Register to Ask a Question