Можно ли с помощью xargs обработать объединенный вывод нескольких команд одновременно?

Вы уверены, что помещаете необработанные управляющие последовательности в текстовый файл? Я попробовал это сcurl-7.52.1, используя как netcat, так и apache, и в обоих случаях curl правильно выводил escape-последовательность, чтобы слово на моем терминале окрашивалось в красный цвет.

Попробуйте это,

echo $'\e[0;31mTEST\e[0m' | nc -l -p 8080 -q0
curl localhost:8080
3
01.05.2020, 16:42
4 ответа

Вы можете сделать это с помощью GNUparallel:

$ printf '%s\n' x* | parallel echo "{1}:{2}" :::: subdomains.txt :::: -
admin.site.com:xab
admin.site.com:xac
admin.site.com:xad
web.site.com:xab
web.site.com:xac
web.site.com:xad
api.site.com:xab
api.site.com:xac
api.site.com:xad
1
28.04.2021, 23:16

Необходим уродливый метод :eval, поскольку раскрытие фигурных скобок обычно происходит перед раскрытием переменных, поэтому нам требуется 2 раунда оценки.

sub=$( paste -sd, subdomains.txt )
xs=$( ls -d x* | paste -sd, )
eval "printf '%s\n' {$sub}:{$xs}"

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

mapfile -t sub < subdomains.txt
xs=( x* )
for s in "${sub[@]}"; do
  for x in "${xs[@]}"; do
    echo "$s:$x"
  done
done
1
28.04.2021, 23:16

Вам нужно только printf '%s\n' x*, если у вас более 32000 файлов.

В противном случае это будет работать:

parallel mytool.sh --parm1 {1} --parm2 {2} :::: subdomains.txt ::: x*

Прочтите главы 1+2 из http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html(, которые можно загрузить сhttps://doi.org/10.5281/zenodo.1146014). Ваша командная строка будет любить вас за это.

(Если файлы x*взяты из split, вам также следует прочитать главу 9

.
parallel -a bigfile --block 10M --pipepart --argsep,, -I,, parallel --pipe --tee wc {} ::: -l -c -w

).

0
28.04.2021, 23:16
$ printf '%s\n' x* | join -t : -1 2 -2 2 -o 1.1,2.1 subdomains.txt -
admin.site.com:xaa
admin.site.com:xab
admin.site.com:xac
web.site.com:xaa
web.site.com:xab
web.site.com:xac
api.site.com:xaa
api.site.com:xab
api.site.com:xac

Это использует joinдля создания своего рода перекрестного произведения между доменами, перечисленными в файле subdomains.txt, и именами файлов, начинающимися с символа xв текущем каталоге.

Перекрестное произведение создается путем запроса joinна объединение двух наборов данных в несуществующем -поле (столбце 2, указанном с помощью -1 2и-2 2). Мы также указываем разделитель полей ввода и вывода как :с -t :, и мы явно просим получить первый столбец из каждого файла, используя -o 1.1,2.1(, иначе у нас был бы пустой первый столбец в результате ).

1
28.04.2021, 23:16

Теги

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