awk question

Quartz quartz at sneakertech.com
Mon Oct 5 03:30:51 UTC 2015


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.


More information about the freebsd-questions mailing list