A message for Linux.com registered users: We are in the process of making changes to the Linux forums. Starting Monday, 8/13/18 at 6:00 PM PT, you will be unable to access the forums. They will re-launch as soon as possible on Wednesday, 8/15/18 with new features and improved functionality. Thank you for your patience and stay tuned for the new improved forums.

March 26, 2010

Aargh.. can't figure this out: for( i in s), index

Following is a script file snippet which is intended to replace a keyword with another string, which contains a numeric (line #) index into a key word file of following form:


It parses all *.htm files in a directory, parses and creates equivalent *.htp files. Parsing and replacement works fine.

# $1 = KeyWordFile
find . \( ! -name . -prune \) -type f -name "*.$INEXT" | while read FILE
awk 'BEGIN{ FS=";"}
FNR==NR{ s[$1]=$2; next }
for( i in s ) {
system("echo hello alldef: " def " i: " i " >>trash.txt")
if( $0 ~ i ){
system("echo hello def: " def " >>trash.txt")
system("echo hello i: " i " >>trash.txt")
system("echo hello s[i]: " s[i] " >>trash.txt")
print $0
}' $1 $FILE > temp
# $FILE is form ./*.htm
outfile=`echo "$FILE" | cut -f2 -d "/" | cut -f1 -d "."`
echo "$outfile"
mv -f temp $outfile.$OUTEXT
echo hello

The problem is that my line counter (def) for the keyfile is out of sync with the keyword (iterator - i) from "for( i in s )"

I get output like:

hello alldef: 0 i: blue_pill

which should be:

hello alldef: 32 i: blue_pill

since blue_pill is on the 32nd line.

does the "for( i in s )" not start iterating at first line, or am I seriously missing something? Is there a better way to do this?

Thanks for looking...


Click Here!