Есть ли способ объединить строки после выражения соответствия в awk? - PullRequest
2 голосов
/ 12 апреля 2019

Я пытаюсь лучше отформатировать текст.Я хочу условно объединить две последующие строки в awk: если строка оканчивается на "."выведите строку как есть, если строка не заканчивается на "."присоединитесь к этой и следующей строке, если последние начинаются со строчной буквы.

я пробовал этот вызов awk -f scriptfile textfile

{ if ( $NF ~ /.*\./ )
    print $0;
  else {
    line_p=$0;
    getline;
    if ( $0 ~ /^[ a-z]+/ )
        print line_p, $0;
    else {
        print line_p;
        print $0
        }
    }
}

я пробовал это:

io sono un segno
cavallo come un cammello.
Il mio vitello si chiama segno di
Budd chiari. Se non fosse così:
-cavalli eterni 
-eterni cavalli
opere incompiute

но вывод таков:

io sono un segno cavallo come un cammello.
Il mio vitello si chiama segno di
Budd chiari. Se non fosse così:
-cavalli eterni 
-eterni cavalli
opere incompiute opere incompiute

я не понимаю последнее повторение и почему строки 6 и 7 не объединены

ожидается:

io sono un segno cavallo come un cammello.
Il mio vitello si chiama segno di
Budd chiari. Se non fosse così:
-cavalli eterni 
-eterni cavalli opere incompiute

Ответы [ 2 ]

3 голосов
/ 12 апреля 2019
$ awk '{printf "%s%s", (/^[[:lower:]]/ && (p !~ /\.$/) ? ofs : ors), $0; ofs=OFS; ors=ORS} {p=$0} END{print ""}' file
io sono un segno cavallo come un cammello.
Il mio vitello si chiama segno di
Budd chiari. Se non fosse così:
-cavalli eterni
-eterni cavalli opere incompiute
0 голосов
/ 12 апреля 2019

Вы можете установить разделитель выходной записи на пустую строку и установить флаг в зависимости от того, оканчивается ли текущая строка ., чтобы при обработке следующей строки вы могли вручную вывести либо пробел, либо основанный на новой строкео флаге и о том, начинается ли текущая строка строчной буквой перед печатью текущей строки:

awk 'BEGIN{ORS=""}{if(/\.$/){print" ";a=2}else{if(a==2||/^[^a-z]/){print "\n"}else{if(a)print" "};a=1}}END{print"\n"}1' textfile

Это приводит к выводу:

io sono un segno cavallo come un cammello.
Il mio vitello si chiama segno di
Budd chiari. Se non fosse così:
-cavalli eterni 
-eterni cavalli opere incompiute
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...