#!/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
Хорошо, если вам это нужно в 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
Точный синтаксис будет зависеть от точного ввода. Если поле значения всегда начинается <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
индексируется по дате и содержит сумму значений, просмотренных для этой даты.