Intereting Posts

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

Я извлекаю строки из набора текстовых файлов с awk. Файлы выглядят так:

1000 1 75 1000 2 76 1001 1 76 1001 2 80 

Я ищу несколько каталогов из них с помощью этой команды:

 awk -F"\t" '$3 == "76" { print $1"\t"$2}' ../benchmark/*/labels.txt 

awk дает мне правильный результат:

 1000 2 1001 1 

Теперь для каждой найденной строки я должен выполнить скрипт, передающий эти два числа в качестве параметров, например:

 ./build.oct 1000 2 

Каков правильный способ сделать это? Мне не очень-то нравится вывод скриптовой консоли (он создает файлы).

Вы также можете использовать 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 разделены на обеих вкладках и 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 

Это сработало для меня:

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

Предполагая, что столбцы 1 и 2 не будут иметь пробелов в своих записях, вы также можете сделать:

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