(SOLVED) Re: fix a txt/dat file with soccer data using awk and sort
Antonio Olivares
wingators at inbox.com
Sun Oct 4 16:52:00 UTC 2015
> -----Original Message-----
> From: jonfu at jgcomp.com
> Sent: Sun, 04 Oct 2015 01:01:26 -0400
> To: users at lists.fedoraproject.org
> Subject: Re: fix a txt/dat file with soccer data using awk and sort
>
> On Sat, Oct 03, 2015 at 06:23:38PM -0800, Antonio Olivares wrote:
>> Dear fedora users,
>>
>> I have a file table.dat with team data ie, Wins Loses Draws Goals For,
>> Goals Against, Total Points as follows:
>>
>> $ cat table.dat
>> Team W L D GF GA DIF PTS
>> Team1 3 2 1 13 17
>> Team2 2 3 1 14 13
>> Team3 6 0 0 28 13
>> Team4 0 6 0 5 23
>> Team5 0 0 0 0 0
>> $ awk '{print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6 "\t" $7 "\t" $8
>> "\t" $5-$6, "\t" $2*3+$3*0+$4*1}' table.dat
>> Team W L D GF GA DIF PTS 0
>> 0
>> Team1 3 2 1 13 17 -4
>> 10
>> Team2 2 3 1 14 13 1
>> 7
>> Team3 6 0 0 28 13 15
>> 18
>> Team4 0 6 0 5 23 -18
>> 0
>> Team5 0 0 0 0 0 0
>> 0
>> bash-4.3$
>>
>> I can get the DIF by subtracting the 5th - 6th and get the goal
>> differential, and the points by multiplying the Wins by 3 and the loses
>> by 0 and the ties by 1 and get the points. I am not expert, but instead
>> of using a spreadsheet I would like to use awk as the example shows, but
>> I would like the DIF to be under DIF and the points under PTS, how can I
>> accomplish this? Also if it were possible which I do not see why not?
>> is how can I sort the teams by the ones higher in the table?
>
> Here is a shot at it. Assumptions include the team names are
> longer than shown so I left room for up to 15 chars and for
> the sorting to work as I have it, the names can not have spaces.
>
> awk '
> BEGIN { SortCmd = "sort -nr -k 8" }
>
> NR == 1 {
> printf "%-15s %5s %5s %5s %6s %6s %6s %6s\n",
> "TEAM", "W", "L", "D", "GF", "GA", "DIF", "PTS"
> }
>
> NR > 1 {
> dif = $5 - $6
> pts = $2 * 3 + $4
> printf "%-15s %5d %5d %5d %6d %6d %6d %6d\n",
> $1, $2, $3, $4, $5, $6, dif, pts | SortCmd
> }
> ' datafile
>
This achieves the goal that was set. The only thing is how can I call it from script with a different datafile, instead of writing the datafile each time. ie,
save the above instructions to a file called teamstats.sh. In it, datafile would be teams1.dat. How can I call it/script with different teams.dat? so it can run nicely.
>>
>> For example, I would like to do something like:
>>
>> http://www.premierleague.com/en-gb/matchday/league-table.html/
>>
>> http://www.mlssoccer.com/standings
>>
>> http://www.mediotiempo.com/tabla_general.php?id_liga=1
>>
>> but only using awk/sed/sort no spreadsheet, no database only nice
>> unix/linux/bsd tools
>>
>> Also add a variation, if the teams tie in regulation, then overtime
>> kicks(extra time) and/or penalty kicks to determine a winner. If the
>> team wins in overtime or penalty kicks the winning team earns two points
>> and the loser earns one point only
>>
>> Team W L D GF GA OT/PKS DIF PTS
>> Team1 3 2 1 13 17
>> Team2 2 3 1 14 13
>> Team3 6 0 0 28 13
>> Team4 0 6 0 5 23
>> Team5 0 0 0 0 0
>>
>> Here Team1 ties with Team2 and they go into overtime and remain tied in
>> Overtime. After the overtime, they go into Penalty Kicks. Team2 beats
>> Team1 in PKS and earns two points, in the overall PTS
>>
>> team1 earns 10 total pts, and team2 should have 8 pts. But the awk
>> command on top gives 7 points because it does not take into account PKS.
>>
>> awk '{print $1 "\t" $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6 "\t" $7 "\t" $8
>> "\t" $5-$6, "\t" $2*3+$3*0+$4*1}' table.dat
>>
>> how can it be done so that the table prints out correctly and in the
>> OT/PKS line, the team that wins gets a 1:0 and the losing team gets a
>> 0:1 and each time they tie and go in to OT, a running tally gets going
>> 2:0 or 1:1 depending if they split the games.
>>
>> Thank you in advance for suggestions and advice. I am discovering awk
>> that one can do math to lists and tables it is awesome. I did not know
>> this, I just used sed -i 's|*|x|g' file to replace text x with *.
>>
>
> I'm unclear about what is needed for your second variation.
> It seems that the input data should have numbers in the PKS
> column indicating how many extra points they should receive.
> In that case, simply adjust the terms calculating "pts"
> (something like pts = $2 * 3 + $4 + $7) and the corresponding
> arguments to printf.
>
I got it to work, however I had to modify the arguments.
awk '
BEGIN { SortCmd = "sort -nr -k 10" }
NR == 1 {
printf "%-15s %5s %5s %5s %5s %2s %6s %2s %6s %6s\n",
"TEAM", "GP", "W", "L", "w", "l", "GF" , "GA", "DIF", "PTS"
}
NR > 1 {
dif = $7 - $8
pts = $3 * 3 + $5*2 +$6*1
printf "%-15s %5d %5d %5d %5d %2d %6d %2d %6d %6d\n",
$1, $2, $3, $4, $5, $6, $7, $8, dif, pts | SortCmd
}
' 2015-324a.dat
file 2015-324a.dat is
$ cat 2015-324a.dat
Team GP W L w l GF GA DIF PTS
Progreso 10 7 3 0 0 28 16 12 21
IDEAFrontier 10 0 9 1 0 3 48 45 2
LaFeria 10 10 0 0 0 61 6 55 30
PortIsabel 10 6 4 0 0 24 20 4 18
RioHondo 10 5 5 0 0 19 17 2 15
Lyford 10 1 9 0 1 7 35 28 4
$
running the command with data here achieves:
$ sh teamstats2.sh
TEAM GP W L w l GF GA DIF PTS
LaFeria 10 10 0 0 0 61 6 55 30
Progreso 10 7 3 0 0 28 16 12 21
PortIsabel 10 6 4 0 0 24 20 4 18
RioHondo 10 5 5 0 0 19 17 2 15
Lyford 10 1 9 0 1 7 35 -28 4
IDEAFrontier 10 0 9 1 0 3 48 -45 2
which matches the data in question:
http://rgvfutbol.com/temp2015/distritosfem4a2015.htm#32-4A
differences are the formatting. I made two lines one for winning and one for losing the SO(Shoot Out/PKS) and the GF vs GA I played around with ":", but could not get it to work. However this solves the problem and I am grateful to both you and Stephen
for your help and generosity. This way I can help district chairperson generate the correct results without pile of dung :)
Best Regards,
Antonio
> --
> Jon H. LaBadie jonfu at jgcomp.com
> --
> users mailing list
> users at lists.fedoraproject.org
> To unsubscribe or change subscription options:
> https://admin.fedoraproject.org/mailman/listinfo/users
> Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct
> Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines
> Have a question? Ask away: http://ask.fedoraproject.org
____________________________________________________________
Can't remember your password? Do you need a strong and secure password?
Use Password manager! It stores your passwords & protects your account.
Check it out at http://mysecurelogon.com/password-manager
More information about the users
mailing list