Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Twee lijnen tekst samevoegen  (gelezen 3756 keer)

Offline thailand

  • Lid
Twee lijnen tekst samevoegen
« Gepost op: 2019/10/03, 09:47:42 »
********************
133
00:09:34,196
No.
[SPEAKS SPANISH]

136
00:09:41,738
I trust you'll look out for me
as long as I'm paying you.

137
00:09:44,907
I trust that, all right?
[PATTING]

******************
Ik heb een bestand zoals dit deel hierboven.
Ik wil twee lijnen tekst samenvoegen maar enkel indien de bovenste lijn eindigd op een letter en een punt.
En de tweede lijn begint met [.
Ik heb een bewerking met awk maar die voegt twee lijnen samen als het totaal aantal tekens kleiner is dan 50.
Dus zou ik hier length moeten veranderen maar ik weet niets van awk.
Misschien iemand die hier iets weet (kan ook met sed).

awk 'length($3$4)<50{$3=$3" "$4;NF=3}1' RS= OFS='\n' ORS='\n\n' FS='\n'

Re: Twee lijnen tekst samevoegen
« Reactie #1 Gepost op: 2019/10/03, 14:00:15 »
Hallo, ik ben niet bekend met awk of sed, maar wat je volgens mij moet doen is zoeken naar een return gevolgd door een [ en die combi vervangen door alleen de [ . Anders gezegd, alleen die \n (new line, return) weghalen.

In jouw voorbeeld eindigt patroon 137 niet op een punt maar op een vraagteken. Misschien eindigen andere op een uitroepteken. Dus die punt is geen goed criterium.

Dus in regex zoiets als s/\n[/[/g;

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: Twee lijnen tekst samevoegen
« Reactie #2 Gepost op: 2019/10/04, 16:10:50 »
Als je het wilt doen zoals Paul Matthijsse voorstelt, met sed: sed ':a;N;$!ba;s/\n\[/ \[/g' file.txt
Resultaat:

133
00:09:34,196
No. [SPEAKS SPANISH]

136
00:09:41,738
I trust you'll look out for me
as long as I'm paying you.

137
00:09:44,907
I trust that, all right? [PATTING]

Of als je echt enkel een punt en [ combi wilt vervangen, met sed: sed ':a;N;$!ba;s/\.\n\[/\. \[/g' file.txt
Resultaat:

133
00:09:34,196
No. [SPEAKS SPANISH]

136
00:09:41,738
I trust you'll look out for me
as long as I'm paying you.

137
00:09:44,907
I trust that, all right?
[PATTING]

sed dient eigenlijk voor per-line input, maar met dit truukje (:a;N;$!ba) kan je het laten werken op de hele file.

edit: of nog wat eenvoudiger zonder het truukje, met optie -z voor null separated records (en -u voor unbuffered): sed -zu 's/\.\n\[/\. \[/g' input
« Laatst bewerkt op: 2019/10/04, 16:15:55 door profoX »
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline thailand

  • Lid
Re: Twee lijnen tekst samevoegen
« Reactie #3 Gepost op: 2019/10/05, 06:50:11 »
Deze twee sed bewerkingen doen het allebei, maar bij deze
sed ':a;N;$!ba;s/\n\[/ \[/g' file.txt
gebeurt er iets dat u niet kan weten en dat is mijn fout.
In dit bestand heb je ook de volgende blokken.
******

18
00:03:37,306 --> 00:03:38,608
[DOOR OPENS]

19
00:03:40,011 --> 00:03:40,978
[DOOR CLOSES]

20
00:03:41,644 --> 00:03:43,113
First off, Mikhail,

******

Hier veranderd het script ook blok 18 en 19 maar ik los dit zo op
sed ':a;N;$!ba;s/\.\n\[/\. \[/g'
sed ':a;N;$!ba;s/\!\n\[/\! \[/g'
sed ':a;N;$!ba;s/\?\n\[/\? \[/g'
En dit doet het dus hierbij is voor mij dit opgelost.
Hartelijk bedankt.
Bedankt hierbij ook aan Paul Matthijsse.