awk question


 
Thread Tools Search this Thread
Operating Systems HP-UX awk question
# 1  
Old 02-06-2006
awk question

Hi,

I have a awk script which takes the input as dat file and generates doc file as output. This script is running fine for long time. But lately users are complaining about one problem. If there are multiple parts number it should display the information by part numbers.
like this:

Code:
ORDER #:15WZ0000	Part #:15117110		Model Y.:6   Recv. Dock:DDD   ST Loc.:18003
.......................................................................................
ORDER #:15WZ0006	Part #:15856412		Model Y.:6   Recv. Dock:DDD   ST Loc.:18003

Previous Cumm. Quantity:0		Horizon Start:20051225	Horizon End:20060204
Cumulative Quantity    :0		Horizon Start:20051225	Dispatch Date:20060205


FORECAST           PERIOD    DATE REQUIRED               QUANTITY
======================================================================
Firm                Weekly   20060206                           810
Firm                Weekly   20060213                           542
======================== End of the Item 15856412 =======================
Firm                Weekly   20060305                           105
Planning            Weekly   20060213                           840
Planning            Weekly   20060220                          1170
Planning            Weekly   20060227                          1200
Planning            Weekly   20060306                          1740
Planning            Weekly   20060313                          1110
Planning            Weekly   20060320                          1155
Planning            Weekly   20060327                           825
Planning            Weekly   20060410                           690
Planning            Weekly   20060417                           930
Planning            Weekly   20060424                          1365
Planning            Weekly   20060501                          1365
Planning            Weekly   20060508                          1215
Planning            Weekly   20060515                          1035
Planning            Weekly   20060522                           855

As you can see there are two part number and after the first part number it displays a line that has the data saying "end of item".

It works fine when there are multiple part numbers in one file. But, If I have multiple files then it shows the correct information for 1st part but not for other parts like part level information.

In my second post, I am uploading the script which are using to generate this report.
# 2  
Old 02-06-2006
Script which generates the report file:

Code:
BEGIN { FS = "|"
LOOP=0
PRINT=0
}

{
if ( $1 == "H" )
{
printf("                              GM DELFOR      \n\n")
printf("Document #:%s                   Material Release #:%s           DUNS #:%
s\n",$6,$15,$13)
printf("Doc. Date :%s           Horizon Start Date:%s           Horizon End Date
:%s\n",$7,$9,$11)
printf("________________________________________________________________________
_______________\n\n")
}

if ( $1 == "L" && LOOP == "1" )
{
#printf("^L")
printf("........................................................................
...............\n")
LOOP=0
}

if ( $1 == "L" )
{
LOOP=1
PARTNUM=$4
printf("ORDER #:%s      Part #:%s               Model Y.:%s   Recv. Dock:%s   ST
 Loc.:%s\n\n",$11,$4,$7,$8,$2)
}

if ( $1 == "LD" )
{
   if ( $2 == 79 && $4 == 51 )
   {
   SUM79=$3
   DATE51=$5
   }
   if ( $2 == 79 && $4 == 52 )
   {
   DATE52=$5
   }

   if ( $2 == 3 && $4 == 51 )
   {
   SUM3=$3

DATE351=$5
   }
   if ( $2 == 3 && $4 == 11 )
   {
   DATE11=$5
   }
PREV_LINE=$1
}
if ( $1 == "D" && PREV_LINE == "LD" )
{
   printf("Previous Cumm. Quantity:%s           Horizon Start:%s        Horizon
End:%s\n",SUM79,DATE51,DATE52)
   printf("Cumulative Quantity    :%s           Horizon Start:%s        Dispatch
 Date:%s\n",SUM3,DATE351,DATE11)
PREV_LINE=$1
print "\n\nFORECAST           PERIOD    DATE REQUIRED               QUANTITY"
print "======================================================================"

}

if ( $1 == "D" )
{
   if ( $2 == 1 && $3 == "W")
   printf("Firm                Weekly   %s                    %10s\n",$5,$7)
if ( $2 == 4 && $3 == "W")
   printf("Planning            Weekly   %s                    %10s\n",$5,$7)

   if ( PRINT == 0 && ($2 =="" || $3 =="" ))
   {
   PRINT=1
   printf("======================== End of the Item %s =======================\n
",PARTNUM)
  }

}

}


Regards,
Inder
# 3  
Old 02-06-2006
It would be eaiser to follow the program logic with a sample of the input file. Perhaps you could post the input file that generated the sample report above.
# 4  
Old 02-08-2006
The following is the program:

BEGIN { FS = "|"
LOOP=0
PRINT=0
}

{
if ( $1 == "H" )
{
printf(" GM DELFOR \n\n")
printf("Document #:%s Material Release #:%s DUNS #:%s\n",$6,$15,$13)
printf("Doc. Date :%s Horizon Start Date:%s Horizon End Date:%s\n",$7,$9,$11)
printf("_______________________________________________________________________________________\n\n" )
}

if ( $1 == "L" && LOOP == "1" )
{
#printf("
")
printf(".......................................................................................\n")
LOOP=0
}

if ( $1 == "L" )
{
LOOP=1
PARTNUM=$4
printf("ORDER #:%s Part #:%s Model Y.:%s Recv. Dock:%s ST Loc.:%s\n\n",$11,$4,$7,$8,$2)
}

if ( $1 == "LD" )
{
if ( $2 == 79 && $4 == 51 )
{
SUM79=$3
DATE51=$5
}
if ( $2 == 79 && $4 == 52 )
{
DATE52=$5
}

if ( $2 == 3 && $4 == 51 )
{
SUM3=$3
DATE351=$5
}
if ( $2 == 3 && $4 == 11 )
{
DATE11=$5
}
PREV_LINE=$1
}
if ( $1 == "D" && PREV_LINE == "LD" )
{
printf("Previous Cumm. Quantity:%s Horizon Start:%s Horizon End:%s\n",SUM79,DATE51,DATE52)
printf("Cumulative Quantity :%s Horizon Start:%s Dispatch Date:%s\n",SUM3,DATE351,DATE11)
PREV_LINE=$1
print "\n\nFORECAST PERIOD DATE REQUIRED QUANTITY"
print "======================================================================"

}

if ( $1 == "D" )
{
if ( $2 == 1 && $3 == "W")
printf("Firm Weekly %s %10s\n",$5,$7)
if ( $2 == 4 && $3 == "W")
printf("Planning Weekly %s %10s\n",$5,$7)

if ( PRINT == 0 && ($2 =="" || $3 =="" ))
{
PRINT=1
printf("======================== End of the Item %s =======================\n",PARTNUM)
}

}

}
# 5  
Old 02-08-2006
The input data! We don't need a 2nd copy of the program.
# 6  
Old 02-08-2006
Hi Perderabo,

I am sorry for uploading the program twice:

Here is the input data

UNB+UNOA:2+BFT:ZZ+A9J:ZZ+060205:1004+2000221++GMDELFOR
UNH+2000221001+DELFORSmilie:97A:UN
BGM+241:::PS+07+5
DTM+137:20060205:102
DTM+158:20060205:102
DTM+159:20060624:102
FTX+AAI+++PLNNG RLSE 30 WILL SHOW BUILD WK RLSE 31 WILL SHOW MRD
NAD+SU+085397805::16++AROMAT CORP
NAD+MI+88835::92
GIS+37
NAD+ST+19054::92
LIN+++15294047:IN
PIA+1+6:RY
LOC+11+RYD
RFF+ON:15WZ0004
QTY+79:0:EA
DTM+51:20051225:102
DTM+52:20060204:102
QTY+3:0:EA
DTM+51:20051225:102
DTM+11:20060205:102
SCC+4++W:21
QTY+1:1:EA
DTM+158:20060508:102
QTY+1:1:EA
DTM+158:20060515:102
SCC+2
QTY+3:0:EA
DTM+51:20051225:102
DTM+52:20060319:102
SCC+3
QTY+3:0:EA
DTM+51:20051225:102
DTM+52:20060319:102
UNT+34+2000221001
UNZ+1+2000221
UNB+UNOA:2+BFT:ZZ+A9J:ZZ+060205:1004+2000220++GMDELFOR
UNH+2000220001+DELFORSmilie:97A:UN
BGM+241:::PS+07+5
DTM+137:20060205:102
DTM+158:20060205:102
DTM+159:20060624:102
NAD+SU+085397805::16++AROMAT CORP
NAD+MI+88835::92
GIS+37
NAD+ST+18003::92
LIN+++15117110:IN
PIA+1+6:RY
LOC+11+DDD
LOC+159+2G5-F-G
RFF+ON:15WZ0000
QTY+79:3945:EA
DTM+51:20051225:102
DTM+52:20060204:102
QTY+3:3945:EA
DTM+51:20051225:102
DTM+11:20060203:102
SCC+1++W:21
QTY+1:810:EA
DTM+158:20060206:102
QTY+1:542:EA
DTM+158:20060213:102
SCC+2
QTY+3:5297:EA
DTM+51:20051225:102
DTM+52:20060219:102
SCC+3
QTY+3:5297:EA
DTM+51:20051225:102
DTM+52:20060305:102
PAC+++KC323034
QTY+52:15:EA
LIN+++15856412:IN
PIA+1+6:RY
LOC+11+DDD
LOC+159+2F6-A
RFF+ON:15WZ0006
QTY+79:0:EA
DTM+51:20051225:102
DTM+52:20060204:102
QTY+3:0:EA
DTM+51:20051225:102
DTM+11:20060205:102
SCC+1++W:21
QTY+1:105:EA
DTM+158:20060213:102
SCC+4++W:21
QTY+1:840:EA
DTM+158:20060220:102
QTY+1:1170:EA
DTM+158:20060227:102
QTY+1:1200:EA
DTM+158:20060306:102
QTY+1:1740:EA
DTM+158:20060313:102
QTY+1:1110:EA
DTM+158:20060320:102
QTY+1:1155:EA
DTM+158:20060327:102
QTY+1:825:EA
DTM+158:20060410:102
QTY+1:690:EA
DTM+158:20060417:102
QTY+1:930:EA
DTM+158:20060424:102
QTY+1:1365:EA
DTM+158:20060501:102
QTY+1:1365:EA
DTM+158:20060508:102
QTY+1:1215:EA
DTM+158:20060515:102
QTY+1:1035:EA
DTM+158:20060522:102
QTY+1:855:EA
DTM+158:20060529:102
SCC+2
QTY+3:91:EA
DTM+51:20051225:102
DTM+52:20060219:102
SCC+3
QTY+3:2109:EA
DTM+51:20051225:102
DTM+52:20060305:102
PAC+++KC323034
QTY+52:15:EA
UNT+89+2000220001
UNZ+1+2000220



And, another thing is that I have the input data like:

QTY+1:105:EA
DTM+158:20060213:102

so, in the report under date required it should show 20060213 but it is showing 20060315.

It is showing the wrong date only for this part number and for all the other part numbers the date is correct.

So I don't know what I am doing wrong?

Regards,
Inder
# 7  
Old 02-08-2006
Hi,

Can anybody please provide any insight, what I am doing wrong?

Thanks,
Inder
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk question : system output to awk variable.

Hi Experts, I am trying to get system output to capture inside awk , but not working: Please advise if this is possible : I am trying something like this but not working, the output is coming wrong: echo "" | awk '{d=system ("date") ; print "Current date is:" , d }' Thanks, (5 Replies)
Discussion started by: rveri
5 Replies

2. Homework & Coursework Questions

awk question.

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: im using ls -l | xargs | awk '{what ever files here}' im trying to get something that looks like this... (7 Replies)
Discussion started by: rontopia
7 Replies

3. UNIX for Dummies Questions & Answers

Basic awk question...getting awk to act on $1 of the command itself

I have a script problem that I am not able to solve due my very limited understanding of unix/awk. This is the contents of test.sh awk '{print $1}' From the prompt if I enter: ./test.sh Hello World I would expect to see "Hello" but all I get is a blank line. Only then if I enter "Hello... (2 Replies)
Discussion started by: JasonHamm
2 Replies

4. UNIX for Dummies Questions & Answers

awk question

Can anyone help with this this one liner: nawk -v RS='' '$1=$1' InputFile What I have in the file: 0.0013985457223116 -0.0002338180925628 0.0 0.0003709430584958 -0.0005763523138347 0.0 And the output I want: 0.0013985457223116 -0.0002338180925628 0.0 0.0003709430584958... (1 Reply)
Discussion started by: mookie123
1 Replies

5. UNIX for Dummies Questions & Answers

awk question

Hi, in the following script, what does " a=$0} END " mean ? do we need that ? Thanks awk '{a=$0} END {for (i=NR; i>=1; i--) print a}' file (3 Replies)
Discussion started by: james94538
3 Replies

6. Shell Programming and Scripting

Awk Question

How I can rid of the following presentation du -sk /u*/oradata/TEST/*.dbf |awk '{print total+=$1} 1.28003e+06 4.35109e+06 4.36134e+06 4.4535e+06 5.47752e+06 5.48777e+06 7.52554e+06 7.73036e+06 9.06158e+06 :confused: thank you (3 Replies)
Discussion started by: zam
3 Replies

7. Shell Programming and Scripting

awk question

I am trying to read through a file, gather the states in that file and change it from an abbreviation to the ful text. Can anyone provide some assistance. Thanks!! (4 Replies)
Discussion started by: cnitadesigner
4 Replies

8. Shell Programming and Scripting

awk .. question?

i have a little awk script that I use looks this: awk '{if (FNR==1){print FILENAME; print $0}else print $0}' file1...file2....fi... > bundled. i have completely forgotten how to unbundle this. I have tried several different approaches and still can not remember how to unbundle the file bundled.... (2 Replies)
Discussion started by: moxxx68
2 Replies

9. Shell Programming and Scripting

One more awk question!

Hello, I have the following command that does 2 searches. awk '{if ($0 ~ /STRING1/) {c++} }{if ( c == 2 ) {sub(/STRING1/,"NEWSTRING") } } { print }' FILE How do I search up after the first search? thanks (4 Replies)
Discussion started by: ctcuser
4 Replies

10. Shell Programming and Scripting

awk question

I have the following error: ls -lt | awk 'BEGIN NR > 1 { print $2, $9 }' Syntax Error The source line is 1. The error context is BEGIN >>> NR <<< > 1 { print $2, $9 } awk: 0602-500 Quitting The source line is 1. What I want to do is ls a directory, skip the first... (3 Replies)
Discussion started by: lesstjm
3 Replies
Login or Register to Ask a Question