Script Help/Advice


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script Help/Advice
# 1  
Old 10-10-2007
Script Help/Advice

Alright, I feel like I have a pretty good basic knowledge of shell scripting, but this one is throwing me for a loop. I know I've seen something similar done with awk, but I couldn't find it with the search function.

I've grepped through my log file and get results like this:

Code:
--
/home/dir1/file-egress-filter-Remark : Stuff
/home/dir1/file-egress-filter-permit stuff
/home/dir1/file-egress-filter-permit other stuff
/home/dir1/file-egress-filter:permit more stuff
--
/home/dir1/other-egress-filter-Remark : Other
/home/dir1/other-egress-filter-permit other
/home/dir1/other-egress-filter-permit other others
/home/dir1/other-egress-filter:permit more other
--

This can continue on for few or many files. Notice that the last line of each has a colon (Smilie as the last delimiter where as the others are a dash (-) and also that there is a : in the first line of each.

I want output like:

Code:
--
file-egress-filter
Remark : Stuff
permit stuff
permit other stuff
permit more stuff
--
other-egress-filter
Remark : Other
permit other
permit other others
permit more other
--

So, the stuff between each set of -- changes and I want to take the file name and use it as a header and then just print the stuff after the delimiter which is a dash for all but the last line.

Ideas?
# 2  
Old 10-10-2007
sed sounds like an appropriate tool to split the lines up into their components.
# 3  
Old 10-10-2007
not extremely elegant, but... you could probably improve the logic/flags:

nawk -f earnstaf.awk myGreppedLogFile
earnstaf,awk:
Code:
BEGIN {
  FS="[/]"
}
/^--/ {block++;print;next}
block {
  match($NF, "^.*-.*-[^-][^-]*-")
  printf("%s\n", substr($NF, 1, RLENGTH-1))
}
{
  !(block) && ($0 ~ ":") ? match($NF, ":[^:][^:]*$") : match($NF, "-[^-][^-]*$")
  printf("%s\n", substr($NF, RSTART+1))
  block=0
}

# 4  
Old 10-11-2007
This is a snippet of code.

Try this Out!!!!!!!!!!!!!!!!!!!!!!!

sed '1s/\(.*\)\(file.*filter\)\(.*\)/\2/' filename |sed '2,4d'

cut -d'/' -f4 filename | sed 's/\(.*\)\(permit.*\)/\2/' |sed 's/\(.*\)\(Remark.*\)/\2/'

Regards,
aajan
# 5  
Old 10-11-2007
Quote:
Originally Posted by vgersh99
not extremely elegant, but... you could probably improve the logic/flags:

nawk -f earnstaf.awk myGreppedLogFile
earnstaf,awk:
Code:
BEGIN {
  FS="[/]"
}
/^--/ {block++;print;next}
block {
  match($NF, "^.*-.*-[^-][^-]*-")
  printf("%s\n", substr($NF, 1, RLENGTH-1))
}
{
  !(block) && ($0 ~ ":") ? match($NF, ":[^:][^:]*$") : match($NF, "-[^-][^-]*$")
  printf("%s\n", substr($NF, RSTART+1))
  block=0
}

vgersh, that looks pretty nice even though I can decipher very little of the actual awk code. It also works well with a couple of issues which are my fault for failing to include them in the example.

1.) The grep returns some "blank" lines, staying with my example they look like this:
Code:
--
/home/dir1/file-egress-filter-Remark : Stuff
/home/dir1/file-egress-filter-permit stuff
/home/dir1/file-egress-filter-
/home/dir1/file-egress-filter-permit other stuff
/home/dir1/file-egress-filter-
/home/dir1/file-egress-filter:permit more stuff
--
/home/dir1/other-egress-filter-
/home/dir1/other-egress-filter-Remark : Other
/home/dir1/other-egress-filter-permit other
/home/dir1/other-egress-filter-
/home/dir1/other-egress-filter-permit other others
/home/dir1/other-egress-filter:permit more other
--

The code is returning those as just the filename ie "other-egress-filter-" and I would like to return it as a truly blank line (under the header) Thoughts?

2.) Disregard 2 Smilie ... I was able to pipe information from the grep into the awk.
# 6  
Old 10-11-2007
I read up on what you were doing with match and RLENGTH and RSTART, but I'm having a little trouble wrapping my head around the code itself.

Bear with me as I try to go through this:
Code:
BEGIN {
  FS="[/]"  #setting the FS to / .. I assume for the /home/dir1/ part of my pattern space..                                         
}
/^--/ {block++;print;next}  #look for -- at the start of line.  Unsure of the significance of incrementing the block... print the -- and move to the next line 
block {
  match($NF, "^.*-.*-[^-][^-]*-")  #regexp matching the "file" portion of my pattern (file-egress-filter-) .. not sure on the exclusion of dashes ([^-])..
  printf("%s\n", substr($NF, 1, RLENGTH-1)) #print newline, then print the line, starting at the first position and the whole string minus the last character.
}
{
  !(block) && ($0 ~ ":") ? match($NF, ":[^:][^:]*$") : match($NF, "-[^-][^-]*$") #if the line was not matched on the previous regexp (block) and contains a : then match on a : then no colon until the end of the line?
  printf("%s\n", substr($NF, RSTART+1)) #kinda lost here... is it saying print 1 position after the match? ..so after the :?
  block=0  #once again, not sure on the significance of the count. 
}

So, I realize that probably way off... I'll play more with awk.
# 7  
Old 10-11-2007
Code:
BEGIN {
  FS="[/]"
}
/^--/ {block++;print;next}
block {
  match($NF, "^.*-.*-[^-][^-]*-")
  printf("%s\n", substr($NF, 1, RLENGTH-1))
}
!match($NF, "-[^-][^-]*$") {print "";next }
{
  !(block) && ($0 ~ ":") ? match($NF, ":[^:][^:]*$") : match($NF, "-[^-][^-]*$")
  printf("%s\n", substr($NF, RSTART+1))
  block=0
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Advice on a backup script, maybe one is out there already?

Hi, Not sure whether this is the right place to post it. I decided to post it here 'coz Advanced and Expert users will most likely have the answer to what I am looking for. I want to backup scripts that I have access to to a tar file file and zip it. At the moment I am creating a directory... (4 Replies)
Discussion started by: newbie_01
4 Replies

2. Shell Programming and Scripting

Script advice

All I have 2 parent directories - input and output. Each parent has multiple sub-directories...each sub-directory has multiple files. Each parent directory structure is a mirror image of itself I need to poll the imput directory and if a new file is found, encrypt the file, move the file to... (2 Replies)
Discussion started by: davidra
2 Replies

3. Shell Programming and Scripting

Need advice on approach for script

Greetings all. I have a repository server which receives, without exhaggeration, several million files a week. The majority of these files are in .csv format, which means they're highly compressable. They are spread throughout numerous directories where there are configured monitoring utilities... (4 Replies)
Discussion started by: msarro
4 Replies

4. Shell Programming and Scripting

Advice on script

Hi folks, I use following script:- #!/bin/sh # cd Linbread TODAY=`date +"%m%d"` DATA=`grep $TODAY linbread.dat` HOUR=`date +"%H"` if then TOD="Morning" elif then TOD="Afternoon" else TOD="Evening" fi echo $DATA | gawk -F"|" '{printf("%s\n\n%s",$2,$3)}' > $$tmp fold -s -w60... (0 Replies)
Discussion started by: satimis
0 Replies

5. Shell Programming and Scripting

Looking for optimization advice on a short script

I already have a solution to my problem, but I'm looking to see if it can be made more succinct and faster. The problem: given a list, as shown below, extract the pathname for any file in a directory named 'ample' and return it's index into the list. The index is also in the data itself. Note that... (1 Reply)
Discussion started by: prigo
1 Replies

6. Shell Programming and Scripting

advice on shell script

Hello, I have this script running on cron every 20 minutes. By 12pm daily, our system is expecting all input files to be uploaded by the script. After this cutoff time, the script would still be running though, but i need some kind of alerts/logs to know which input files weren't received for... (1 Reply)
Discussion started by: gholdbhurg
1 Replies

7. Shell Programming and Scripting

Script Advice please?

Ok. I want to parse a log file and search only for denied traffic for the previous hour. The log looks like this: Jun 18 17:47:56 routername 36806: Jun 18 17:53:01.088: %SEC-6-IPACCESSLOG: list ingress-filter denied tcp 1.2.3.4(1234) -> 6.7.8.9(53), 4 packets I only really care about the... (12 Replies)
Discussion started by: earnstaf
12 Replies

8. Shell Programming and Scripting

Advice on Script

I would like some advice on how to logically put together a script to handle a daily task of data gathering for the following problem. I have two files, file1 has 125,000 records that I cut and remove unwanted fields through scripts and cron. In file2, I have 25000 records that has the same... (4 Replies)
Discussion started by: greengrass
4 Replies

9. Shell Programming and Scripting

first script. need help and advice.

Hello everyone, This is my first post here and this is the first time I am using UNIX OS (Slackware). I find it really useful and powerful and would like to master it but as you may guess I am expreicing quite a few problems. I've been reading a few documentations about it and bash this week... (17 Replies)
Discussion started by: sanchopansa
17 Replies

10. Shell Programming and Scripting

c-shell script advice please.

Hi, I have the following script running in my cron. -------------------------------------------------------------------- #!/bin/csh bnstat -p GPD_VSLinux | grep pg | grep varcon | awk '{print $1, $2, $3, $4, $5, $6, $7, $8, $9, $10}' > /tmp/LX_xbatch.log bnstat -p GPD_VSLinux_test | grep pg... (2 Replies)
Discussion started by: killerserv
2 Replies
Login or Register to Ask a Question