On Fri, Oct 21, 2005 at 08:45:38PM -0500, Martin McCormick wrote: > A Bourn shell script I am trying to run isn't behaving like I > expected it to and I am not sure how to make it play nice. There are > a bunch of DNS zone files that need the bottom 6 lines chopped off and > I hoped to do that with a while loop driven by the ls command. In > order to loose the bottom 6 lines, one must count all the lines, > subtract 6 from that number and use the new value as a value for head. > The problem occurs in the way awk is producing output in the loop. > Here is the script: > > #! /bin/sh > filechop () { > #This function takes one file at a time and removes the bottom 6 lines. > #Get a single numerical value stating how many lines are in the file. > zlength=`wc -l $zonename|awk '{print $1}'` > shortlength=$(($zlength - 6)) > head -$shortlength $zonename >tmp.zone > mv tmp.zone $zonename > return 0 > } > #main routine > while zonename=`ls *.zone`;do > filechop > done > > Things go quite wrong when awk produces a line of output > instead of one value per line which would drive the rest of the script. > I have tried putting parentheses around the line reading > > zlength=`(wc -l $zonename)|awk '{print $1}'` > > And, I have moved the right parenthesis to include the awk call, but > that changed nothing. > > Is there any way to get one value per iteration? > > Thanks for any good ideas. > > Martin McCormick WB5AGZ Stillwater, OK > OSU Information Technology Division Network Operations Group Not sure if I understood the problem correctly, but how about:
#! /bin/sh filechop () { #This function takes one file at a time and removes the bottom 6 lines. #Get a single numerical value stating how many lines are in the file. zlength=`wc -l $zonename|awk '{print $1}'` shortlength=$(($zlength - 6)) head -$shortlength $zonename >tmp.zone mv tmp.zone $zonename return 0 } #main routine for zonename in `ls *.zone`; do filechop; done Simo -- :r ~/.signature
signature.asc
Description: Digital signature