Запускать одновременные экземпляры команды внутри сценария оболочки

Мы можем построить массив «первое значение, сумма второго значения», а затем после того, как весь файл был прочитан в мы можем распечатать результаты

awk '{a[$1]+=$2} END { for (v in a) { print v,a[v]}}' datafile

Если вы хотите, чтобы вывод был отсортирован, то самый простой способ - передать его через sort:

awk '{a[$1]+=$2} END { for (v in a) { print v,a[v]}}' datafile | sort -n
3
20.05.2016, 20:58
2 ответа

Формулировку вашего вопроса немного трудно понять, но я думаю, что вы ищете что-то вроде :

command & 
command &
wait

Сценарий выполнит две команды в фоновом режиме и будет ждать ответа.

Однако в вашем случае вам нужно быть осторожным с условием гонки. Вероятно, вы захотите отправить вывод отдельных команд во временные файлы, а затем катнуть их в основной файл, поэтому вы, вероятно, сделаете что-то вроде :

command > "${tmp1}" & 
command > "${tmp2}" & 
wait
cat "${tmp1}" "${tmp2}" >> "${main}"
rm -f "${tmp1}" "${tmp2}"

Update: Вы можете попробовать xargs (например, https://stackoverflow.com/questions/15755422/linux-bash-script-to-ping-multiple-hosts-simultaneously)

4
27.01.2020, 21:18

С помощью GNU Parallel вы можете сделать это:

date >> teste.txt
cat hosts.txt |  parallel -j0 ping -c 10 -i 1 {} >> teste.txt
date >> teste.txt
0
27.01.2020, 21:18

Теги

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