Hogyan lehetne szétszedni? Sorok bontása szóhatárra

Példa:

Van egy pár soros szöveg amit szeretnék max 80 karakterre szétszedni úgy, hogy közben a sorokat számoljuk.
Tehát ha most ezt mint a második sort is számolom akkor úgy látom, hogy már ez több mint 80 karakter, tehát ideje lenne szétkapni.

A felső két sort hogy tudom úgy szétszedni, hogy számolva a sorok számát is 4-et kapjak, tehát a

Megoldás:

1. Van egy pár soros szöveg amit szeretnék max 80 karakterre szétszedni úgy,
2. hogy közben a sorokat számoljuk.
3. Tehát ha most ezt mint a második sort is számolom akkor úgy látom, hogy
4. már ez több mint 80 karakter, tehát ideje lenne szétkapni.

Bash lenne a legjobb, de kiegyezek bármivel.

Hozzászólások

- Jön a szöveg, stdin, vagy file, tökmindegy, lényeg, hogy ciklusban olvasod, pl. while read -r blabla 
- Elkezded olvasni szavanként, a szót a végét követő karakterrel együtt változóba teszed
- Növeled a karakter számlálót, a kiírt szó hosszával, plusz egy a whitespace miatt.
- Ha az aktuális olvasott szó határa nem whitespace, hanem EOL, akkor a karakter számlálót megnöveled ezerrel, ezzel indukálod a következő sor azonnali életbe lépését.
- Ha a karakter számláló nagyobb mint a határ (nálad 80 karakter), akkor kiírod az aktuális puffert a sor számláló értékével prefixelve, majd sor számláló növelés, karakter számláló nullázás, puffer ürítés, aztán a pufferhez hozzáadod az aktuális változót (az utoljára olvasott szót, amivel együtt már több lett volna a sor mint 80 karakter).
- ha nem lett kiírva a puffer, akkor a puffer végére írod az aktuális szót.
- EOF esetén még kiírod az utolsó szót és a buffer tartalmát, majd kilépsz a ciklusból.

Ha magyar szöveg, lehet cizellálni, hogy vessző esetén érdemes hamarabb törni a sort, vagy két sor puffer, és ha a második sor csak egy-két szó, akkor az előző sorból áthozni tartalmat, hogy ne legyen túl rövid a sor, stb.

Szerkesztve: 2022. 05. 02., h – 20:49

így?

echo "Van egy pár soros szöveg amit szeretnék max 80 karakterre szétszedni úgy, hogy közben a sorokat számoljuk.
Tehát ha most ezt mint a második sort is számolom akkor úgy látom, hogy már ez több mint 80 karakter, tehát ideje lenne szétkapni." | sed -E 's/(^.{80}[^ ]+\b)/\1\n/gm;t;d' | nl

 

lehetne finomitani gondolom ....

Nem egészen értem mit akarsz. 80 karakter széles wrappinget, de szóhatáron (soft/word wrapping), vagy szó közben is jó (hard/fix wrapping). Ezzel a sorszámolással sem értem mit akarsz, nem számozást értesz alatta? Muszáj 4 sorosnak lennie? 4 sor után üres sor vagy mi jönne?

Tényleg nem értetlenkedni akarok, de nem tudom elképzelni pontosan. Mert pl. honnan tudod, hogy a szövegben nincsenek 4×80 karakternél hosszabb sorok, amit 80 karakterenként csak 4-nél több sorra fogsz tudni eltörni. Azt se ártana tudni, hogy mihez kell ez neked? Mert a 80 soros limit ma már nem egy életszerű limit. Mert ha valami grafikus szövegre kell, akkor pl. a TeX, LaTeX elég szépen tudja úgy törni a szöveget, hogy szépek legyenek a sorok, ne legyenek aránytalanok a szóközök, ha kell, tud elválasztást, elválasztási kivételt is.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Szerintem van egy hosszú sorokból álló szövege, aminél meg szeretné tudni, hogy max. 80 karakteres sorokra tördelve hány sort tesz ki. (Ilyen/hasonló feladatot én is adtam - igaz sok-sok-sok éve - aláíráspótlós diákomnak...)

A max. 80 karakter az "fmt -80 -s textfile.txt", ha a sorok számát is elé akarjuk rakni, akkor mondjuk "fmt -80 -s textfile.txt | awk '{printf "%d %s\n", NR, $0}'" , de ha csak aza  kérdés, hogy hány, maximum 80 karakteres sorba fér el, akkor fmt -80 -s textfile.txt | wc -l

"Számolni meg azért kell, mert max 11 sor lehet a leírás." - Én ilyenkor fognék egy 80*25-ös konzolablakot, meg valami épkézláb texteditort, és belezutty a szöveget, és ott gyúrnám addig a szöveget, amíg a 80 oszlop és 11 sor limitbe bele nem fér. Mert ha az áttördelés után több, mint 11 sor, akkor úgyis újra kell fogalmazni...

Belefér a 11 sorba. Szerintem nincs olyan csomag aminél eddig láttam volna a határt. De a számolás azért kell, mert az üres sorokat is ki kell íratni utána.

 HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|' on
# the right side marks the last column you can put a character in.  You must make
# exactly 11 lines for the formatting to be correct.  It's also customary to
# leave one space after the ':'.

       |-----handy-ruler------------------------------------------------------|
appname: appname (Short description of the application)
appname:      <this line is generally left blank>
appname: Description of application  -  this description should be fairly
appname: in-depth; in other words, make it clear what the package does (and 
appname: maybe include relevant links and/or instructions if there's room),
appname: but don't get too verbose.  
appname: This file can have a maximum of eleven (11) lines of text preceded by
appname: the "appname: " designation.  
appname:
appname: It's a good idea to include a link to the application's homepage too.
appname:

A kolléga úgy érti, hogy nem kötelező, mert szerintem az ezt kezelő toolok simán beolvasnak akármilyen plain text leírást, max 80 oszlopnál törnek és 11 sor után vágnak, de nem futnak hibába, ha a te leírásod ennél több, csak annyi lesz az esztétikai kényelmetlenség, hogy a vége nem fog látszani a leírásnak. Egy másik szálban egyébként írtam megoldást, fold | head, teszteltem, működik simán shellben.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)