Возможно, этот порт не открыт ни на маршрутизаторе, ни в брандмауэре компьютера.
Это может помочь, если вы используете Red Hat:https://superuser.com/questions/794104/how-to-permanently-disable-firewall-in-red-hat-linux
Это просто приводит к выводу последнего содержимого, буферизованного в переменной i
. Это создает пустую строку, поэтому awk запускается еще раз для этой пустой строки, и поэтому он выводит буферизованное значение в переменной i
. вместо <(echo)
вы можете использовать блок END{ print i }
.
См. также мой этот ответ о том, как вы могли бы сделать это другими способами в обоих случаях, когда ваш ввод отсортирован/не отсортирован.
<(
— это «подстановка процессов», которая является особенностью GNU Bourne -Again Shell (Bash ). Это не в POSIX.
Подстановка процесса — это часть синтаксиса, которая расширяется до аргумента командной строки. Целевая программа может открыть аргумент, как если бы это было имя файла. Результирующий файловый дескриптор подключается к командному каналу, указанному в синтаксисе в скобках.
Таким образом, <(echo)
расширяется до некоторого слова, подобного /magic/path/53
. Когда программа получает этот путь и открывает его для файла в качестве входных данных, она получает дескриптор канала, который читается из echo
.
Что делает echo
? Выдает пустую строку.
Единственная разница между
some-command <(echo)
и
some-command /dev/null
заключается в том, что <(echo)
выдает пустую строку, тогда как /dev/null
ничего не выдает.
Вы можете представить, что <(echo)
— это путь к файлу, содержащему одну пустую строку (, если этот путь открыт только для ввода, а не для вывода ).
Здесь идея, похоже, состоит в том, чтобы гарантировать, что ввод в awk
содержит завершающую пустую строку. То есть, что бы ни было во входном файле test.cov
, там будет дополнительная пустая строка. Этого требует логика скрипта, потому что он сохраняет состояние между последовательными строками. Существует переменная i
, содержимое которой зависит от предыдущей строки и печатается при поступлении следующей строки. i
, рассчитанный для последней строки, никогда не печатается, поэтому без дополнительной пустой строки из <(echo)
последняя строка test.cov
не будет полностью обработана.
Обратите внимание, что если test.cov
отсутствует завершающий символ новой строки, то <(echo)
не просто добавит эту новую строку; несколько входных файлов для awk не просто объединяются в один символьный поток. Запись будет разделена в конце первого файла, независимо от того, присутствует ли новая строка, а второй файл создает новую запись.
Существует простой способ удалить зависимость от функции подстановки процесса из окружающей оболочки:
awk '{if($1==x){i=i" "$2}else{if(NR>1){print i};i=$0};x=$1;y=$2}; END {print i}'
Вот именно! Мы добавляем блок END
, который печатает все накопленные i
. Нам не нужен там тест NR > 1
, потому что если NR == 0
, это означает, что никакие записи не обрабатывались, и поэтому i
не определено и печатается как ничего. Однако в этом случае выводится пустая пустая строка, чего можно избежать с помощью END {if (i) print i}
.