awk or nawk in ksh


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk or nawk in ksh
# 1  
Old 06-23-2011
awk or nawk in ksh

I am trying to use either awk or nawk in ksh88 to grep the word "Reason" in multiple files and than print the lines that say "Reason" in a particular format that is different from how they would normally print. The original input is as follows:
Code:
 
export/home/gen/links/inform/10.76.113.55-AV33-13-Jun-22-10-58-56.txt:DIAG 0x92: Reason: Reboot
/export/home/gen/links/inform/10.47.142.55-AV63-13-Jun-22-11-08-34.txt:DIAG 0x92: Reason: Reboot
/export/home/gen/links/inform/10.44.612.65-AV64-13-Jun-22-16-40-43.txt:DIAG 0x92: Reason: Reboot
/export/home/gen/links/inform/10.47.512.25-AV66-13-Jun-22-17-00-44.txt:DIAG 0x92: Reason: Reboot
/export/home/gen/links/inform/10.75.26.175-AV26-19-Jun-22-19-18-29.txt:DIAG 0x92: Reason: Reset
/export/home/gen/links/inform/10.47.52.165-AV27-19-Jun-22-20-52-54.txt:DIAG 0x92: Reason: Reset
/export/home/gen/links/inform/10.73.144.153-AV72-18-Jun-22-20-53-09.txt:DIAG 0x91: Reason: Queue has 375 events. First event code 2f3790f8
/export/home/gen/links/inform/10.75.612.143-AV47-18-Jun-22-21-11-38.txt:DIAG 0x91: Reason: Queue has 375 events. First event code 2f3790f8

This is after the code is grepped for all lines containing "Reason" and then I egrep -v some things to eliminate lines that contain both "Reason" and other items. The below is the code that I have:

Code:
 
YESTER=`TZ=aaa24 date +%b"-"%d`
 
 
JET=$(find /export/home/gen/links/inform -name \*$YESTER\*)
 
grep "Reason" $JET | uniq | egrep -v "PASSTHRU|OCP|Power Button Reboot|Bootloader" | cut -d'/' -f 7 | awk -F"-" '{print $4,$5","$2","$3","$1":"$8","$1}' | awk -F":" '{print $1","$3":"$4":"$5}' | awk -F"," '{print $1","$2","$3","$4","$5","$4}' >> $OUTPUT

the problem aside from the fact that it is really long and there seems like there should be a better way to do this is that the last field gets printed on the newline.

This is the output I am getting:

Code:
 
Jun 22,AV33,13,10.76.113.55,DIAG 0x92: Reason: Reboot
,10.76.113.55
Jun 22,AV63,13,10.47.142.55,DIAG 0x92: Reason: Reboot
,10.47.142.55
Jun 22,AV64,13,10.44.612.65,DIAG 0x92: Reason: Reboot
,10.44.612.65
Jun 22,AV66,13,10.47.512.25,DIAG 0x92: Reason: Reboot
,10.47.512.25
Jun 22,AV26,19,10.75.26.175,DIAG 0x92: Reason: Reset
,10.75.26.175
Jun 22,AV27,19,10.47.52.165,DIAG 0x92: Reason: Reset
,10.47.52.165
Jun 22,AV72,18,10.73.144.153,DIAG 0x91: Reason: Queue has 375 events. First event code,10.73.144.153
Jun 22,AV47,18,10.75.612.143,DIAG 0x91: Reason: Queue has 375 events. First event code,10.75.612.143

I would like to be getting the following output:

Code:
 
Jun 22,AV33,13,10.76.113.55,DIAG 0x92: Reason: Reboot,10.76.113.55
Jun 22,AV63,13,10.47.142.55,DIAG 0x92: Reason: Reboot,10.47.142.55
Jun 22,AV64,13,10.44.612.65,DIAG 0x92: Reason: Reboot,10.44.612.65
Jun 22,AV66,13,10.47.512.25,DIAG 0x92: Reason: Reboot,10.47.512.25
Jun 22,AV26,19,10.75.26.175,DIAG 0x92: Reason: Reset,10.75.26.175
Jun 22,AV27,19,10.47.52.165,DIAG 0x92: Reason: Reset,10.47.52.165
Jun 22,AV72,18,10.73.144.153,DIAG 0x91: Reason: Queue has 375 events. First event code 2f3790f8,10.73.144.153
Jun 22,AV47,18,10.75.612.143,DIAG 0x91: Reason: Queue has 375 events. First event code 2f3790f8,10.75.612.143

Those last two lines should all be on one line...they were just too long to fit here.
Any help is greatly appreciated!!

---------- Post updated at 05:30 PM ---------- Previous update was at 05:20 PM ----------

Please ignore my last comment about the last two lines being on one line, the output as shown above is exactly how I want it to be
# 2  
Old 06-23-2011
i tested with linux/bash. sorry don't have access to Solaris machine from home..

Code:
#!/bin/sh
filelist=$(find ./inform -name *.txt -print | tr '\n' ' ')
echo "Files $filelist"

nawk -F':' '
$2 ~ /Reason/ && $3 !~ /(PASSTHRU|OCP|Power Button Reset|Bootloader)/ {
        split(FILENAME, a, "-")
        f = a[1]
        while (i = index(f, "/")) f = substr(f, i+1)
        printf("%s %s,%s,%s,%s,%s,%s\n", a[4], a[5], a[2], a[3], f, $0, f)
}' $filelist


Last edited by neutronscott; 06-23-2011 at 07:10 PM.. Reason: forgot $2 ~ /Reason/
# 3  
Old 06-24-2011
To neutronscott

Thanks for your response. Its giving me the following error:

Code:
 
TrainingScript.sh: syntax error at line 62: `filelist=$' unexpected

# 4  
Old 06-24-2011
Quote:
Originally Posted by ther2000
Thanks for your response. Its giving me the following error:

Code:
 
TrainingScript.sh: syntax error at line 62: `filelist=$' unexpected



neutronscott used "#! /bin/sh". On Solaris that is the old Bourne shell. Switch it to ksh.
# 5  
Old 06-24-2011
I tried that but that gives me this error:
Code:
 
 
find: bad option Scriptingnotes.txt
find: [-H | -L] path-list predicate-list
Files

# 6  
Old 06-24-2011
Try changing that line:
Code:
filelist=$(find ./inform -name \*.txt -print | tr '\n' ' ')

This User Gave Thanks to Perderabo For This Post:
# 7  
Old 06-24-2011
Okay so that works for pulling all of the files that end in .txt. However, I have created a variable for yesterday and I am trying to only find the files that contain yesterday in the filename. So when I try this code, it doesn't seem to work.

Code:
 
YESTER=`TZ=aaa24 date +%b"-"%d`
filelist=$(find /export/home/gen/links/inform -name \*$YESTER -print | tr '\n' ' ')
echo "Files $filelist"
nawk -F':' '
$2 ~ /Reason/ && $3 !~ /(PASSTHRU|OCP|Power Button Reset|Bootloader)/ {
split(FILENAME, a, "-")
f = a[1]
while (i = index(f, "/")) f = substr(f, i+1)
printf("%s %s,%s,%s,%s,%s,%s\n", a[4], a[5], a[2], a[3], f, $0, f)
}' $filelist

---------- Post updated at 10:27 AM ---------- Previous update was at 10:24 AM ----------

Nevermind, I just got that to work by doing this:
Code:
 
 
filelist=$(find /export/home/gen/links/inform -name \*$YESTER\* -print | tr '\n' ' ')

However I am having some trouble directing this to an $OUTPUT file variable....any idea as to where I should put the >>?
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Awk,nawk Help please

Hi Guys, I am in need of some help; I have an xml message file which contains personal details as shown below: , message=, message=, message=, message=, message=, message= I want to use nawk to parse these xml messages but I am new to awk and nawk. What I want is to get output... (7 Replies)
Discussion started by: James_Owen
7 Replies

2. Shell Programming and Scripting

ksh/nawk help with if statement to choose between 2 files

Hi! I am having a bit of a problem with my script. There are two different date formats that may appear in a file, either Jul-12 or Jul--6. I tried to create an if statement that searches for one of the formats and if that doesn't exist searches for the other, however it doesn't seem to be... (3 Replies)
Discussion started by: ther2000
3 Replies

3. UNIX for Dummies Questions & Answers

Help me to know about awk and nawk

Hi everyone, i am new to unix , so i want to know what is the use of awk and nawk. because in most of the place this cmds were used. so, if anyone provied the basic idea of this cmds, it will be much helpfull for me . . .. Thnks in Advance :) (9 Replies)
Discussion started by: natraj005
9 Replies

4. UNIX for Dummies Questions & Answers

Arrays in nawk and ksh

I'm not confident at all on how arrays work. I want to know how to set arrays in ksh and in nawk (is there a difference??) if someone can show me some examples of both that will be great. Tried to look up on the net but was confusing me more. Any help would be appreciated. (2 Replies)
Discussion started by: Pablo_beezo
2 Replies

5. Shell Programming and Scripting

how to access values of awk/nawk variables outside the awk/nawk block?

i'm new to shell scripting and have a problem please help me in the script i have a nawk block which has a variable count nawk{ . . . count=count+1 print count } now i want to access the value of the count variable outside the awk block,like.. s=`expr count / m` (m is... (5 Replies)
Discussion started by: saniya
5 Replies

6. UNIX for Dummies Questions & Answers

How to use awk instead of nawk?

Hi all, I can run the following script using nawk..However, I find that teh server dun support nawk.. May I know how to change teh script to use awk such that it will work? Very urgent.. thx! nawk 'BEGIN {FS=OFS=","} NR==FNR{arr=$2;next} $0 !~ "Documentation"{print $0;next} ... (2 Replies)
Discussion started by: kinmak
2 Replies

7. Shell Programming and Scripting

nawk/ksh help

Hello, First of all, I am trying to duplicate the sum command using ksh/nawk Lets assume the following algorithms work just fine and there is no calculation errors what so ever (which I doubt at this minute). For now, I wanna make sure the script uses the BSD algorithim if -r is used... (0 Replies)
Discussion started by: DeltaX
0 Replies

8. Shell Programming and Scripting

nawk -v to awk

hi, i have the command nawk -v i want to use it equivalent in awk? any help please :) (2 Replies)
Discussion started by: kamel.seg
2 Replies

9. UNIX for Dummies Questions & Answers

help with Awk or nawk

Can anyone explain to me why the first line doesn't work and the second seems to work fine. I am trying to find all occurances of text within a certain column (col 13) that start with the character V, I suppose it sounds simple but I have tried using the following but don't really understand what... (2 Replies)
Discussion started by: Gerry405
2 Replies
Login or Register to Ask a Question