gzip * .txt vs gzip test.txt & gzip test2.txt &

echo "---------------";awk -F: '$3+$4>500{print $1,$2}' inputfile |sort && echo "---------------"

используя awk

awk -F: '$3+$4>500{Arr[$1]=$2}END{n=asorti(Arr,SArr);for(i=1;i<=n;i++){print SArr[i],Arr[SArr[i]]}}' inputfile
2
12.07.2017, 12:32
2 ответа

Не изобретайте велосипед. Вы можете использовать pigz, параллельную реализацию gzip, которая должна быть в репозиториях ваших дистрибутивов. Если это не так, вы можете получить его у здесь .

Установив pigz, используйте его как обычноgzip:

pigz *txt

Я протестировал это на 5 30-мегапиксельных файлах, созданных с помощьюfor i in {1..5}; do head -c 50M /dev/urandom > file"$i".txt; done:

## Non-parallel gzip
$ time gzip *txt
real    0m8.853s
user    0m8.607s
sys     0m0.243s

## Shell parallelization (same idea as yours, just simplified)
$ time ( for i in *txt; do gzip $i & done; wait)

real    0m2.214s
user    0m10.230s
sys     0m0.250s

## pigz
$ time pigz *txt

real    0m1.689s
user    0m11.580s
sys     0m0.317s
2
27.01.2020, 22:03

Единственный реальный способ — рассчитать время. Я бы ожидал, что gzip *.txtсделает их по одному, так как это отдельные файлы.

Запуск их параллельно (с использованием gzip file1.txtи т. д.)может быть быстрее, но это будет зависеть от того, сколько у вас памяти, сколько ядер процессора и т. д. Наиболее важным фактором является то, что вы получите конкуренцию за диск, пока вы это делаете, и это может сильно замедлить работу (, если это не SSD, и даже в этом случае в некоторой степени ).В сумме они оба будут использовать одинаковое количество процессорного времени.

Я обычно использую gzip *.txtили аналогичный.

1
27.01.2020, 22:03

Теги

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