Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing a shell wrapper script for awk

Tags:

shell

awk

I want to embed an awk script inside a shell script but I have trouble to do so as I don't know where to end a statement with a ; and where not.

Here's my script

#!/bin/sh

awk='

BEGIN {FS = ",?+" }

# removes all backspaces preceded by any char except _
function format() {
    gsub("[^_]\b", "")
}

function getOptions() {
    getline
    format() 

    print
}

{
    format()

    if ($0 ~ /^SYNOPSIS$/ {
        getOptions()
        next            
    }

    if ($0  /^[ \t]+--?[A-Za-z0-9]+/) {
        print $0
    }
}

END { print "\n" }'

path='/usr/share/man/man1'
list=$(ls $path)

for item in $list
do
    echo "Command: $item"
    zcat $path$item | nroff -man | awk "$awk"
done > opts

I'm using nawk by the way.

Thanks in advance

like image 681
helpermethod Avatar asked Aug 16 '26 14:08

helpermethod


1 Answers

There are several things wrong, as far as I can see:

  1. You don't close the multi-line string being assigned to $awk. You need a single quote on the line after END { ... }
  2. You don't seem to actually use $awk anywhere. Perhaps you meant on the invocation of awk inside the do loop.
  3. Once you fix those issues, awk is usually fairly forgiving about semicolons, but any problems in that regard don't have anything to do with using it inside a shell script.
like image 193
Dale Hagglund Avatar answered Aug 19 '26 12:08

Dale Hagglund



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!