Bash: передать пакеты файлов в скрипт python

Попробуйте это (проверено на GNU Awk 3.1.7):

awk '{sub(/\./,"");sub(/kbps/,"000");sub(/mbps/,"000000")}1' foo.csv
0
04.09.2019, 16:15
1 ответ

С GNU xargsи оболочкой с поддержкой подстановки процессов (ksh, bash, zsh )вы можете сделать:

xargs -r0 -n100 -a <(printf '%s\0'./*) python application.py -fp

Пример:

$ xargs -r0n4 -a <(printf '%s\0' {1..20}) echo
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20

Без замены процессавы также можете сделать:

printf '%s\0'./* | xargs -r0 -n100 -python application.py -fp

Но это означает, что stdin application.pyбудет /dev/null, который в системах с /dev/fd/xxxможно обойти, в основном реализуя подстановку процесса вручную с помощью:

{
  printf '%s\0'./* |
    xargs -a /dev/fd/3 3<&0 <&4 4<&- -r0 -n100 -python application.py -fp
} 4<&0

Сzsh:

autoload zargs
zargs -l 100./* -- python application.py -fp

Пример:

$ zargs -l4 {1..20} -- echo
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20

Вы также всегда можете сделать (ksh93/bash/zsh):

set --./*
while (($# > 0)); do
  python application.py -fp "${@:1:100}"
  shift "$(($# >= 100 ? 100 : $#))"
done

Пример:

$ set -- {1..20};while (($#>0));do echo "${@:1:4}";shift "$(($#>4?4:$#))";done
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20

Если ваши файлы на самом деле называются file-1, file-2... вы, вероятно, захотите использовать zshи егоn(для числовой сортировки )квалификатор glob для списка файлов для сортировки численно:

zargs -l 100./*(n) -- python application.py -fp

Или используйте GNUsort -zV(для сортировки версии )на выходеprintf '%s\0':

xargs -r0 -n100 -a <(printf '%s\0'./* | sort -zV) python application.py -fp
2
28.01.2020, 02:39

Теги

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