From e222a11fe07282abe999a04c2df4f599d5f41d62 Mon Sep 17 00:00:00 2001 From: Aivaras Baranauskas <5412767+aivarasbaranauskas@users.noreply.github.com> Date: Wed, 13 Sep 2023 15:35:00 +0300 Subject: [PATCH 1/2] awk solution --- sh/main.sh | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/sh/main.sh b/sh/main.sh index 1a24852..e9f4471 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -1 +1,37 @@ -#!/bin/sh +#!/usr/bin/awk -f +{ + s = 0; + noZero = 1; + for(i=3; i<=NF; i++) { + if ($i == 0) { + noZero = 0; + } + s += $i * $2; + } + + if (noZero == 1) { + found = 0 + k = 0 + for (i in names) { + if (names[i] == $1) { + all[i] += s; + noZeros[i] += noZero; + found = 1; + } + k++ + } + + if (found == 0) { + names[k] = $1 + all[k] = s; + noZeros[k] = noZero; + } + } +} +END{ + k = 0 + for (i in names) { k++ } + for (i=0 ; i Date: Wed, 13 Sep 2023 15:48:12 +0300 Subject: [PATCH 2/2] nicer awk solution --- sh/main.sh | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/sh/main.sh b/sh/main.sh index e9f4471..96b4fac 100755 --- a/sh/main.sh +++ b/sh/main.sh @@ -1,37 +1,27 @@ #!/usr/bin/awk -f { s = 0; - noZero = 1; - for(i=3; i<=NF; i++) { - if ($i == 0) { - noZero = 0; - } + for(i = 3; i <= NF; i++) { + if ($i == 0) { next } s += $i * $2; } - if (noZero == 1) { - found = 0 - k = 0 - for (i in names) { - if (names[i] == $1) { - all[i] += s; - noZeros[i] += noZero; - found = 1; - } - k++ - } - - if (found == 0) { - names[k] = $1 - all[k] = s; - noZeros[k] = noZero; + for (i in names) { + if (names[i] == $1) { + all[i] += s; + noZeros[i] ++; + next } } + + l = length(names) + names[l] = $1 + all[l] = s; + noZeros[l] = 1; } END{ - k = 0 - for (i in names) { k++ } - for (i=0 ; i