AWK Array problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting AWK Array problem
# 1  
Old 04-07-2010
AWK Array problem

Dear All,

I am facing problem to get right output through awk program

I have file in which “B” value is appearing multiple time and I need to capture all these values.

My script is
Code:
BEGIN { FS=" " }
{
 
        if ( substr($1,1,5) == "START" )             
        {
        i = i+1;
        SFILENAME[i] = FILENAME
        }
        if ( $1 == "input" )
                INPUT[i] = $2
        if ( $1 == "output" )
                OUTPUT[i] = $2
                if ( $1 == "B" && k < i )
        {
                k = k+1;
                B[k] = $2
        }
        if ( $2 == "input_type" )
                INPUT_TYPE[i] = $3
        if ( $2 == "output_type" )
                OUTPUT_TYPE[i] = $3
        if ( $1 == "B" )
                                B_2[i] = $2
 
}
 
END{ for (j=1 ; j <=i ; j++  )
 
printf "%s,%s,%s,%s,%s,%s,\n",SFILENAME[j],INPUT[j],OUTPUT[j],B[kh],INPUT_TYPE[j],OUTPUT_TYPE[j],B_2[j]
}

And sample file is
Code:
START
input AAAA
output AAAA.output
B 567
B extra
F input_type xxv
F output_type xxvoo
B 333
.
.
F input_type xxd
B arv
.
START
input BBBB
output BBBB.output
B 666
F input_type xxv
F output_type xxvoo
.
.
F input_type xxd
B arv
.
 
START
input BBBB
output BBBB.output
B 666
F input_type xxv
F output_type xxvoo
.
.
F input_type xxd
B arv
.
.
START
input NNNN
output NNNN.output
B 54
B extra
F input_type xxv
F output_type xxvoo
B 656
.
.
F input_type xxd


Getting output like this
Code:
awk -f my_pro.awk file.txt
file.txt,AAAA,AAAA.output,,xxd,xxvoo,
file.txt,BBBB,BBBB.output,,xxd,xxvoo,
file.txt,BBBB,BBBB.output,,xxd,xxvoo,
file.txt,NNNN,NNNN.output,,xxd,xxvoo,

required output is
Code:
file.txt,AAAA,AAAA.output, 567, extra,xxd,xxvoo, arv
file.txt,BBBB,BBBB.output, 666,xxd,xxvoo, arv
file.txt,BBBB,BBBB.output, 54,xxd,xxvoo, 656
file.txt,NNNN,NNNN.output,,xxd,xxvoo,

Edit by pludi: please use code tags, and please don't change the font and size for each line individually. It's possible to do this for the whole text, which improves rendering.

Last edited by pludi; 04-07-2010 at 04:51 AM.. Reason: code tags, please..
# 2  
Old 04-07-2010
use below modification:-

Code:
BEGIN { FS=" " }
{
 
        if ( substr($1,1,5) == "START" )             
        {
        i = i+1;
        SFILENAME[i] = FILENAME
        }
        if ( $1 == "input" )
                INPUT[i] = $2
        if ( $1 == "output" )
                OUTPUT[i] = $2
                if ( $1 == "B"  )
        {
                
                B[i] = B[i]","$2 ;
        }
        if ( $2 == "input_type" )
                INPUT_TYPE[i] = $3
        if ( $2 == "output_type" )
                OUTPUT_TYPE[i] = $3
}
 
END{ for (j=1 ; j <=i+1 ; j++  )
{

n=split(B[j],A,",");  a=A[n] ; for(i=1;i<n;i++){C[j]=C[j]A[i]"," } ;
printf "%s,%s,%s %s,%s,%s,%s\n",SFILENAME[j],INPUT[j],OUTPUT[j],C[j],INPUT_TYPE[j],OUTPUT_TYPE[j],a

}
}

SmilieSmilieSmilie
# 3  
Old 04-07-2010
Great!!!

Thanks..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Index problem in associate array in awk

I am trying to reformat the table by filling any missing rows. The final table will have consecutive IDs in the first column. My problem is the index of the associate array in the awk script. infile: S01 36407 53706 88540 S02 69343 87098 87316 S03 50133 59721 107923... (4 Replies)
Discussion started by: yifangt
4 Replies

2. Shell Programming and Scripting

How to Assign an shell array to awk array?

Hello All, Can you please help me with the below. #!/bin/bash ARR="No Differences In Stage Between HASH_TOTALS & HASH_TOTALS_COMP For UNINUM:0722075 PROVIDER:5 EXTRACT_DT:30-SEP-12 VER_NUM:1" ARR="No Differences In Stage Between HASH_TOTALS & HASH_TOTALS_COMP For UNINUM:0722075 PROVIDER:5... (14 Replies)
Discussion started by: Ariean
14 Replies

3. Shell Programming and Scripting

Problem with awk array when loading from shell variable

Hi, I have a problem with awk array when iam trying to use awk in solaris box as below..Iam unable to figure out the problem.. Need your help. is there any alternative to make it in arrays from variable values nawk 'BEGIN {SUBSEP=" "; split("101880|110045 101887|110045 101896|110045... (9 Replies)
Discussion started by: cskumar
9 Replies

4. Shell Programming and Scripting

HELP with AWK one-liner. Need to employ an If condition inside AWK to check for array variable ?

Hello experts, I'm stuck with this script for three days now. Here's what i need. I need to split a large delimited (,) file into 2 files based on the value present in the last field. Samp: Something.csv bca,adc,asdf,123,12C bca,adc,asdf,123,13C def,adc,asdf,123,12A I need this split... (6 Replies)
Discussion started by: shell_boy23
6 Replies

5. Shell Programming and Scripting

Using awk array problem

I am trying to map values in the input file, where 2nd column depends on the specific value in the 1st column. When 1st column is A place 1 into 2nd column, when it is B, place 2, when C place 3, otherwise no change. My input: U |100|MAIN ST |CLMN1|1 A |200|GREEN LN |CLMN2|2 1 |12... (4 Replies)
Discussion started by: migurus
4 Replies

6. Shell Programming and Scripting

awk array problem

Hi, Im trying to count bats flying through an infrared beam array. One of the experts here helped me a few months ago but now I am having a problem that is stumping me. here is the original code that works (with two differnt patterns in array): # this has been changed to operate under the... (15 Replies)
Discussion started by: cmp260
15 Replies

7. Shell Programming and Scripting

Challenging Awk array problem

Hi, I rather have a very complicated awk problem here, at least to me. I have two files. File 1: 607 687 174 0 0 chr1 3000001 3000156 -194195276 - L1_Mur2 LINE L1 -4310 1567 1413 1 607 917 214 114 45 chr1 3000237 ... (19 Replies)
Discussion started by: polsum
19 Replies

8. Shell Programming and Scripting

AWK help. how to compare a variable with a data array in AWK?

Hi all, i have a data array as follows. array=ertfgj2345 array=456ttygkd . . . array=errdjt3235 so number or elements in the array can varies depending on how big the data input is. now i have a variable, and it is $1 (there are $2, $3 and so on, i am only interested in $1). ... (9 Replies)
Discussion started by: usustarr
9 Replies

9. Shell Programming and Scripting

Problem with lookup values on AWK associative array

I'm at wits end with this issue and my troubleshooting leads me to believe it is a problem with the file formatting of the array referenced by my script: awk -F, '{if (NR==FNR) {a=$4","$3","$2}\ else {print a "," $0}}' WBTSassignments1.txt RNCalarms.tmp On the WBTSassignments1.txt file... (2 Replies)
Discussion started by: JasonHamm
2 Replies

10. Shell Programming and Scripting

awk array problem

hi i am trying to perform some calculations with awk and arrays. i have this so far: awk 'NR==FNR{ for(i=1; i<=NF; i++) {array+=$i} tot++;next} {for(i=1; i<=NF; i++) {avg=array/tot} {diff=(array - avg)}} {for(i=1; i<=NF; i++) {printf("%5.8f\n",diff)}}' "$count".txt "$count".ttt >... (4 Replies)
Discussion started by: npatwardhan
4 Replies
Login or Register to Ask a Question