Есть ли утилита командной строки Unix для «отображения» построчно? - PullRequest
6 голосов
/ 27 марта 2012

У меня есть входной поток, и я хочу "отобразить" выходные строки.Например, если бы моим входным потоком были номера файлов, я бы хотел, чтобы этот синтаксис

$ cat nums
9534
2343
1093
7023
$ cat nums | map ./myscript $0

был бы эквивалентен

$ echo 9534 | ./myscript
$ echo 2343 | ./myscript
$ echo 1093 | ./myscript
$ echo 7023 | ./myscript

Ответы [ 4 ]

5 голосов
/ 27 марта 2012

Я думаю, xargs - самое близкое к вашему гипотетическому map:

cat nums | xargs -n1 ./myscript

или

cat nums | xargs -n1 -J ARG ./myscript ARG

или

cat nums | xargs -I ARG ./myscript ARG

К сожалению, xargs не позволяет вам вызывать вещи, которые читаются из stdin, поэтому вам придется переписать ваш скрипт, чтобы принять аргумент командной строки, а не читать из stdin.

3 голосов
/ 27 марта 2012
#!/bin/bash
while read -r line
do
  "$@" <<< "$line"
done
0 голосов
/ 19 марта 2018

С GNU Parallel это выглядит так:

$ cat nums | parallel -N1 --pipe ./myscript

, что эквивалентно

$ echo 9534 | ./myscript
$ echo 2343 | ./myscript
$ echo 1093 | ./myscript
$ echo 7023 | ./myscript

Или вы можете сделать:

$ cat nums | parallel ./myscript

, что эквивалентно

$ ./myscript 9534
$ ./myscript 2343
$ ./myscript 1093
$ ./myscript 7023

Задания будут выполняться параллельно (по одному заданию на ядро), пока все задания не будут выполнены.

0 голосов
/ 27 марта 2012

Вы можете использовать скрипт bash для этого.Что-то вроде:

#!/bin/bash

string="| ./myscript"

echo "9534 $string"
echo "2343 $string"
echo "1093 $string"
echo "7023 $string"

Или вы можете легко заполнить массив своими числовыми значениями и просто сделать все это в одном цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...