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
Не изобретайте велосипед. Вы можете использовать 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
Единственный реальный способ — рассчитать время. Я бы ожидал, что gzip *.txt
сделает их по одному, так как это отдельные файлы.
Запуск их параллельно (с использованием gzip file1.txt
и т. д.)может быть быстрее, но это будет зависеть от того, сколько у вас памяти, сколько ядер процессора и т. д. Наиболее важным фактором является то, что вы получите конкуренцию за диск, пока вы это делаете, и это может сильно замедлить работу (, если это не SSD, и даже в этом случае в некоторой степени ).В сумме они оба будут использовать одинаковое количество процессорного времени.
Я обычно использую gzip *.txt
или аналогичный.