Как суммировать значение указанного столбца на определенную дату в kornshell?

#!/bin/bash
 for dir in `find ./httpdocs/*/*/ -name In -type d` ; do
  count=`find $dir -type f | wc -l`
  if [[ $count -gt 50 ]]
     echo $dir
  fi
done
0
22.11.2018, 00:18
2 ответа

Хорошо, если вам это нужно в ksh, этот образец может вам помочь:

Файл данных, который я использовал:

Date  | Money
--------------
1/1/15 : $15
2/2/15 : $14
3/3/16 : $25
1/2/15 : $10
2/1/15 : $35
3/2/15 : $7

Код:

#!/bin/ksh

typeset -A SUM_ARRAY

IN_FILE="$1"

if [[ -z $IN_FILE ]]; then
        print "Usage : script.sh {input filename}"
        exit
fi


while read line;
do
        temp_array=($line)
        if [[ ! ${temp_array[0]} =~ ^(-*)$ && ${temp_array[0]} != "Date" ]]; then
                idx=$(date -d ${temp_array[0]} +"%Y%m")
                SUM_ARRAY[$idx]=$((${SUM_ARRAY[$idx]}+${temp_array[2]#\$*}))
        fi
done < $IN_FILE

print "YearMonth\tSum"

for idx in ${!SUM_ARRAY[@]}; do
        print "$idx\t\t${SUM_ARRAY[$idx]}"
done

Результат:

YearMonth       Sum
201501          25
201502          49
201503          7
201603          25
0
28.01.2020, 04:09

Точный синтаксис будет зависеть от точного ввода. Если поле значения всегда начинается <space><dollar>, мы можем использовать оператор awk:

awk -F: '$2 ~ /^ \$/ { a[$1]+=substr($2,3)} END {for (b in a) { print b"$"a[b]}}'

например,

awk -F: '$2 ~ /^ \$/ { a[$1]+=substr($2,3)} END {for (b in a) { print b"$"a[b]}}' testfile.txt
3/3/16 $25
2/2/15 $14
1/1/15 $15

Обратите внимание, :, если символ-разделитель действительно |, а не :, вам нужно будет сделать awk -F'|'....

Это работает следующим образом:

$2 ~ /^ \$/--для каждой строки, где начинается второе поле<space><dollar>

{ a[$1]+=substr($2,3)}--Добавить содержимое второго поля (, убрав первые два символа ), в массив, проиндексированный по дате

END {for (b in a) { print b"$"a[b]}}'--когда файл закончится, пройдемся по всем найденным датам и выведем итог.

Таким образом, массив aиндексируется по дате и содержит сумму значений, просмотренных для этой даты.

0
28.01.2020, 04:09

Теги

Похожие вопросы