Используйте результаты awk в качестве параметров к другой команде

Использование многих ядер для ускорения производительности зависит в большой степени от приложения. Некоторые приложения должны быть запущены пошаговые: нет только никакого способа разделить вычисление параллельно среди многих ядер, потому что для вычислений определенного шага нужно знать результаты предыдущих шагов. Если это так, затем использование 24 ядер так же хорошо как использование только одного.

В других случаях, где приложение должно сделать много вещей, которые не зависят друг от друга, имея много ядер, может значительно ускорить вещи. Как подходящий пример при компиляции проекта со многими исходными файлами можно скомпилировать каждый исходный файл независимо прежде, чем связать различные файлы. В таком случае у Вас может быть компиляция компилятора каждый файл на отдельном ядре. Приложения, которые могут использовать несколько ядер процессора обычно, имеют переключатель для Вас для запроса этого. Например, при компиляции проекта с помощью GNU make, можно передать его -j переключатель сопровождается числом. Это число указывает количество заданий make должен запуститься одновременно (чтение: на различных ядрах).

3
19.06.2014, 01:05
3 ответа

Вы также можете использовать xargs (-l заставляет выполнять отдельную команду для каждой строки):

timp@helez:~/tmp$ awk -F"\t" '$3 == "76" { print $1"\t"$2}' test.txt | xargs -l ./build.oct 
$1 is  1000  and $2 is  2
$1 is  1001  and $2 is  1

timp@helez:~/tmp$ cat test.txt
1000    1   75
1000    2   76
1001    1   76
1001    2   80
timp@helez:~/tmp$ cat build.oct
echo '$1 is ' $1 ' and $2 is ' $2

Как предлагается в комментариях, вы также можете упростить команду awk, так как и awk, и xargs разбиваются на табуляции и пробелы:

timp@helez:~/tmp$ awk '$3 == "76" {print $1,$2}' test.txt | xargs -l ./build.oct
$1 is  1000  and $2 is  2
$1 is  1001  and $2 is  1
5
27.01.2020, 21:12

Для меня это сработало:

awk -F"\t" '$3 == "76" { printf "./build.oct %d %d\n", $1, $2}' \
../benchmark/*/labels.txt | bash
2
27.01.2020, 21:12

Если предположить, что в колонках 1 и 2 не будет пробела, то можно сделать:

awk -F"\t" '$3 == "76" { print $1"\t"$2}' ../benchmark/*/labels.txt |
    while read a b; do ./build.oct $a $b; done
0
27.01.2020, 21:12

Теги

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