Отформатируйте содержание файла с помощью Perl

Короче говоря, нет. Описание Протокола Эха в RFC 862 очень просто и однозначно:

Основанный на TCP сервис эха

Один сервис эха определяется как основанное на соединении приложение на TCP. Сервер прислушивается к соединениям TCP на порте TCP 7. После того как соединение устанавливается, любые полученные данные передают обратно. Это продолжается, пока вызывающий абонент не завершает соединение.

Основанный на UDP сервис эха

Другой сервис эха определяется как основанное на датаграмме приложение на UDP. Сервер прислушивается к датаграммам UDP на порте UDP 7. Когда датаграмма получена, данные из нее передают обратно в датаграмме ответа.

2
25.11.2018, 16:59
3 ответа

Решение с прямым Perl:

$ perl -lne '
    if(/^>/) {printf "%s ", $_;next}
    if(/^$/) {printf "\n";next}
    printf "%s", $_;
' file
>Country1 Australia
>Country5 Switzerland
>Country2 Netherlands

или более коротким:

$ perl -ane 'BEGIN{$/="";};print "$F[0] ",@F[1..$#F],"\n"' file
>Country1 Australia
>Country5 Switzerland
>Country2 Netherlands

Установите $/ на пустую строку, чтобы Perl переключился в абзацный режим, что означает, что разделитель записей - это одна или несколько пустых строк.

8
27.01.2020, 21:51

Используйте переключатель -p для обработки файла построчно и вывода каждой обработанной строки. Замените новую строку пробелом, если строка начинается с > , и ничем, если она начинается с другого символа, отличного от новой строки (т. Е. Если он не пуст).

perl -pe 'if (/^>/) {s/\n/ /} elsif (/^./) {s/\n//}'
0
27.01.2020, 21:51

Использование Raku (, ранее известного как Perl _6)

raku -ne 'print "$_ " if m/^\>/;.print if m/<alpha>$/;.put unless.chars;'  

Пример ввода:

>Country1
Aus
trali
a

>Country5
Swi
tzer
land

>Country2
Net
herland
s

Пример вывода:

>Country1 Australia
>Country5 Switzerland
>Country2 Netherlands

Спасибо @Gilles, который смог сделать это на Perl с помощью одного оператора if/else. В приведенном выше коде используются три оператора Raku, использующие разницу между printи put. В Raku printне добавляет разделитель новой строки, а putдобавляет. Кроме того, в Raku тильда ~используется для конкатенации строк -, поэтому интерполированное "$_ "могло быть записано $_~" ".

А (возможно? )Преимуществом Raku для решения родственных задач является строгая реализация Unicode charsподпрограммы (Нормализация NFG ). См. URL-адреса внизу.

https://6guts.wordpress.com/2015/04/12/this-week-unicode-normalization-many-rts/
https://docs.raku.org/routine/chars
https://raku.org

0
16.09.2021, 15:17

Теги

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