Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 04 Oct 2015 23:30:42 -0400
From:      Quartz <quartz@sneakertech.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: awk question
Message-ID:  <5611EEE2.9030100@sneakertech.com>
In-Reply-To: <5611C922.4050007@hiwaay.net>
References:  <5611C922.4050007@hiwaay.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Oct 4 8:48 PM, William A. Mahaffey III wrote:
>
>
> I am using awk & smartctl in a small shell script to print out HDD temps
> in a purty format, 1 line per drive. As it happens, the output I want is
> spread out over 4 lines of smartctl out, requiring (I *think*) 4 calls
> to smartctl each piped to its own awk invocation to pull out the line I
> want & print its info out. Is there some way to get awk to consider more
> than 1 line at a time ? In my case my 4 lines are indeed sequential, &
> it would be a bit more efficient if I could process all 4 lines once I
> found the 1st one. This is definitely *not* critical, what I have now
> works AOK, I was/am just curious if it could be optimized a bit. TIA &
> have a good one.

Awk already handles multiple lines just fine, so you're looking for 
something else but don't know how to articulate it.

Considering you're referring to 'pulling out lines', maybe you want to 
trap the output of smartctl into a variable, then just echo that to grep 
a bunch of times, before awk?

ie;

x=$(smartctl)

echo "$x" | grep 'foo' | awk '{print $1}'
echo "$x" | grep 'bar' | awk '{print $2}'
echo "$x" | grep 'baz' | awk '{print $3}'

...etc?

Although depending on what exactly you want to pull from the smartctl 
output, you can probably just do it all from awk in one incantation. Awk 
scripts can be fairly powerful.



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