On 3/21/2008 9:15 AM, spacegoose wrote:
> On Mar 21, 12:04 am, Ed Morton <mor...@[EMAIL PROTECTED]
> wrote:
>
>>On 3/20/2008 11:36 PM, spacegoose wrote:
>>
>>
>>
>>
>>>i have a program that prints out a formatted df command
>>>by sorting and grepping and using awk to print it out.
>>
>>>it basically executes df -h | grep whatever | sort -n +5 and then
>>>awks
>>>to a nice printout like:
>>
>>>disk size capacity
>>>------------------
>>>foo 20gb 70%
>>>moo 40gb 25%
>>>bar 20gb 70%
>>
>>>i'd like to add a new column "accounts" to this print out.
>>
>>>the no. of accounts is derived from a command:
>>>awk {'print $5'} myFile |sort |uniq -c |sort -nr
>>
>>>which prints rows like:
>>
>>>450 foo
>>>300 moo
>>>104 bar
>>
>>>i want to integrate this command into the formatted df program's
>>>output.
>>>i can't figure out how to appropriately append the "account count"
>>>column from the myFile command, to the appropriate row of the
>>>formatted df output,
>>>e.g. where col 1 from the formatted df output matches col 2 of the
>>>myFile command.
>>
>>>so it looks like this:
>>
>>>disk size capacity accounts
>>>---------------------------
>>>foo 20gb 70% 450
>>>moo 40gb 25% 300
>>>bar 20gb 70% 104
>>
>>>Thanks for any hints!
>>>sg
>>
>>$ cat file1
>>450 foo
>>300 moo
>>104 bar
>>
>>$ cat file2
>>disk size capacity
>>------------------
>>foo 20gb 70%
>>moo 40gb 25%
>>bar 20gb 70%
>>
>>$ awk '
>>NR==FNR{acct[$2]=$1;next} FNR==1{sfx=" account"} FNR==2{sfx="--------"}
>>FNR>2{sfx=" "acct[$1]} {print $0 sfx}' file1 file2
>>disk size capacity account
>>--------------------------
>>foo 20gb 70% 450
>>moo 40gb 25% 300
>>bar 20gb 70% 104
>>
>>but I expect there's a much simpler way to get your desired output using
awk on
>>your raw output rather than doing all that post-processing with other
tools
>>first. If you provide your "df -h" output and "myFile" contents that got
you the
>>data above, we could probably help.
>>
>> Ed.
>
>
>
> Thanks Ed,
>
> I definitely want to work with the output rather than files (except
> reading from myFile).
> Fere's the df awk:
>
>
> df -h | grep dsk | sort +5 | awk '
>
> BEGIN {
> printf("%-30s%12s%10s%10s\n\n", "File System", "bytes", "capacity",
> "accounts")
>
printf("-------------------------------------------------------------------
> \n")
> T2 = 0
> T3 = 0
> T4 = 0
> }
>
> {
> printf("%-30s%12s%10s%10s\n", $6, $2, $5, "# accts")
> T2 += $2
> T3 += $3
> T4 += $4
> }'
>
You never use T2, T3, and T4.
I asked you to post the df -h output and the contents of MyFile so we're
not
guessing but try this:
df -h | sort +5 | awk '
BEGIN {
printf "%-30s%12s%10s%10s\n\n", "File System", "bytes", "capacity",
"accounts"
print
"-------------------------------------------------------------------"
}
NR==FNR{ accts[$5]++; next }
{ printf "%-30s%12s%10s%10s\n", $6, $2, $5, accts[$6] }' MyFile -
If that doesn't do what you want, post what I suggested so we can see what
you're working with.
Ed.


|