library(dplyr)
details_from_top20 <- Inventory %>%
group_by(Description) %>%
summarise(n = sum(QTY)) %>%
top_n(20) %>%
left_join(Inventory)
Для воспроизводимого примера мы могли бы использовать mtcars
и получить все данные для автомобилей, которые имеют передачу с наибольшим общим весом, в данном случае 3 передачи. (Это немного надумано, но структурно та же проблема.)
car_gears_with_top2_weights <- mtcars %>%
group_by(gear) %>%
summarise(total_wt = sum(wt*1000)) %>%
top_n(1) %>%
left_join(mtcars)
# A tibble: 15 x 12
gear total_wt mpg cyl disp hp drat wt qsec vs am carb
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 3 58389 21.4 6 258 110 3.08 3.22 19.4 1 0 1
2 3 58389 18.7 8 360 175 3.15 3.44 17.0 0 0 2
3 3 58389 18.1 6 225 105 2.76 3.46 20.2 1 0 1
4 3 58389 14.3 8 360 245 3.21 3.57 15.8 0 0 4
5 3 58389 16.4 8 276. 180 3.07 4.07 17.4 0 0 3
6 3 58389 17.3 8 276. 180 3.07 3.73 17.6 0 0 3
7 3 58389 15.2 8 276. 180 3.07 3.78 18 0 0 3
8 3 58389 10.4 8 472 205 2.93 5.25 18.0 0 0 4
9 3 58389 10.4 8 460 215 3 5.42 17.8 0 0 4
10 3 58389 14.7 8 440 230 3.23 5.34 17.4 0 0 4
11 3 58389 21.5 4 120. 97 3.7 2.46 20.0 1 0 1
12 3 58389 15.5 8 318 150 2.76 3.52 16.9 0 0 2
13 3 58389 15.2 8 304 150 3.15 3.44 17.3 0 0 2
14 3 58389 13.3 8 350 245 3.73 3.84 15.4 0 0 4
15 3 58389 19.2 8 400 175 3.08 3.84 17.0 0 0 2
Вы можете добавьте в crontab следующее:
#write out current crontab
crontab -l > mycron
#echo new cron into cron file
echo "00 09 * * 1-5 echo hello" >> mycron
#install new cron file
crontab mycron
rm mycron
* * * * * "command to be executed"
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
Источник nixCraft .
Нет, в crontab нет опции для изменения файлов cron.
Вам необходимо: взять текущий файл cron (crontab -l> newfile), изменить его и поместить новый файл на месте (crontab newfile).
Если вы знакомы с perl, вы можете использовать этот модуль Config :: Crontab .
LLP, Андреа
Вы можете сделать это на лету
crontab -l | { cat; echo "0 0 0 0 0 some entry"; } | crontab -
crontab -l
перечисляет текущие задания crontab, cat
печатает ее, echo
печатает новую команду, а crontab -
добавляет все напечатанные данные в файл crontab. Эффект можно увидеть, выполнив новый crontab -l
.
EDIT (фиксированная перезапись):
cat <(crontab -l) <(echo "1 2 3 4 5 scripty.sh") | crontab -
Если вы используете Vixie Cron, например, в большинстве дистрибутивов Linux, вы можете просто поместить файл в /etc/cron.d с отдельным заданием cron.
Это работает только для рут конечно. Если ваша система поддерживает это, вы должны увидеть там несколько примеров. (Обратите внимание на имя пользователя, включенное в строку, в том же синтаксисе, что и в старом / etc / crontab)
Это печальная ошибка в cron, что нет способа справиться с этим как обычный пользователь, и что многие реализации cron имеют никак не справиться с этим.
Скорее всего, вы автоматизируете это и не хотите, чтобы одно задание добавлялось дважды. В этом случае используйте:
__cron="1 2 3 4 5 /root/bin/backup.sh"
cat <(crontab -l) |grep -v "${__cron}" <(echo "${__cron}")
Это работает, только если вы используете BASH. Мне неизвестен правильный синтаксис DASH ( sh
).
Обновление: Это не работает, если у пользователя еще нет crontab. Более надежный способ:
(crontab -l ; echo "1 2 3 4 5 /root/bin/backup.sh") | sort - | uniq - | crontab -
В качестве альтернативы, если ваш дистрибутив поддерживает это, вы также можете использовать отдельный файл:
echo "1 2 3 4 5 /root/bin/backup.sh" |sudo tee /etc/crond.d/backup
Нашел их в , другом вопросе SO .