Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Oct 2001 02:11:56 -0500
From:      Mike Meyer <mwm@mired.org>
To:        Chris Fedde <chris@fedde.littleton.co.us>
Cc:        questions@freebsd.org, <kory@avatar.com>
Subject:   Re: Real dumb shell script/awk question 
Message-ID:  <15293.23868.39354.690746@guru.mired.org>
In-Reply-To: <32463104@toto.iv>

next in thread | previous in thread | raw e-mail | index | archive | help
Chris Fedde <chris@fedde.littleton.co.us> types:
> On Thu, 4 Oct 2001 17:46:53 -0700  "Kory Hamzeh" wrote:
>  +------------------
>  | 
>  | I need to bang together a simple shell script to parse a flat ascii
>  | database. The fields are variable width, but each field is separated by the
>  | "|" character. Basically, all this script needs to do is to read the
>  | database, one line at a line, and if field X is equal to value Y, then print
>  | the value of field Z. The user must be able to specify X, Y, and Z on the
>  | command line.
>  | 
>  | Now, for the life of me, I can't seem to figure out a simple way of doing
>  | this with a bourne shell script. I think awk can do it, but the man pages
>  | didn't help me too much with the language. I know other language, like perl,
>  | are probably better suited, but I need to customize this script per the
>  | clients request, and it will only be needed for a couple of weeks and he'll
>  | never need this again.
>  | 
>  | Any tips on how to do this? I'm sure there is a simple way and I'm drawing a
>  | blank.
>  +------------------
> Awk is your friend

But metacharacters are your enemy.

>     $ cat t
>     asdf|trew|agfd
>     asdf|asdf|435
>     wer|asgf|bwhw
>     qwert|qewrt|asdf
> 
>     $ awk -F'|' -e '$1 == $2 {print $3}' t
>     435

That tests field values, not a user-supplied value, and -e isn't an
awk option.

bash-2.05$ cat test
#!/bin/sh
# $1 = X, $2 = Y, $3 = Z

awk -F'|' "\$$1 == $2 {print \$$3}"

bash-2.05$ cat t
asdf|trew|agfd
asdf|asdf|435
wer|asgf|bwhw
qwert|qewrt|asdf

bash-2.05$ sh test 3 435 1 < t
asdf
bash-2.05$ 

Adding simple argument checking is probably worthwhile, as otherwise
awk complains.

	<mike
--
Mike Meyer <mwm@mired.org>			http://www.mired.org/home/mwm/
Q: How do you make the gods laugh?		A: Tell them your plans.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15293.23868.39354.690746>