Bashban sorokban karakter szmlálás

Bashban sorokban karakter szmlálás

Hozzászólások

Koszi, holnap kiprobalom a melohelyen. Mondjuk, legjobban egy (teljes, magyar :) awk-leirasnak orulnek :)
Sajna, legtobb helyen csak megemlitik, adnak par peldat es kesz.

[quote:64f7adff75="Tiboca"]A fentiekből kiindulva egy kis javítással az én verzióm:

[code:1:64f7adff75]
#!/bin/sh
cat dia.ldif | awk '{if ($0~/cn[:=]/) system("echo "$0" | tr [áéíóöőuüű] [aeiooouuu]"); else print $0 }' >> diae.ldif
[/code:1:64f7adff75]

[quote:6259ca11f3="Celtic"]Koszi, holnap kiprobalom a melohelyen. Mondjuk, legjobban egy (teljes, magyar :) awk-leirasnak orulnek :)[quote:6259ca11f3="Tiboca"]A fentiekből kiindulva egy kis javítással az én verzióm:[code:1:6259ca11f3]
#!/bin/sh
cat dia.ldif | awk '{if ($0~/cn[:=]/) system("echo "$0" | tr [áéíóöőuüű] [aeiooouuu]"); else print $0 }' >> diae.ldif
[/code:1:6259ca11f3]

No tehát. Magyar nyelvű _jó_ awk leírást találsz a Kernighan-Pike -féle, a Műszaki Kiadó által valamikor a 80-as évek végén kiadott szürke (új kiadásban piros) borítóju "A UNIX operációs rendszer" c. könyvben. Magyar nyelvű leírást találhatsz awk-ról ezen kívül a Bagoly Zsolt - Papp Gábor által írt, a CoDe Kft által kiadott "UNIX alapismeretek" könyvben; nem mondom hogy részletes, de a lektor neve a garancia, hogy korrekt és használható :-)
Amúgy pedig az awk-ban _vagy_ pontosvesszővel választod el a parancsokat, _vagy_ külön sorba írod (pont, mint shellben). (És persze az se baj, ha külön sorban van, _és_ van pontosvessző is.) Amúgy pedig én ha awk-ban system-mel hívogatnék tr-t, akkor a tr esetében a shell elől is eltakarnám a shell számára is speciális jelentésű karaktereket.

[quote:65276b80f6="algernon"]
Hm.. Igazad van, ${#i} teljesen portabilis. Viszont $(...) is az, raadasul olvashatobb, mint a backtick.

Hm. Nincs igazad. Ha a feladat az, hogy bash-ban ezt-meg azt, akkor nem kell szorakozni portabilitassal, legfeljebb a kulonbozo bash-verziok kozti kulonbseggel kell szenvedni. Azaz irhatjuk mindket format, meg read -r -et is.
Ha viszont felmerul a portabilitas, akkor - nekem legalabbis - a kulonbozo sh-szintaxisu shellek jutnak az eszembe (sh/ksh/ash/bash/zsh/stb), ahol is meg ma is az eredeti Bourn-shell (es nem a bash) az etalon (es a kompatibilitas alapja). Abban pedig nem volt $(..) szintaxis a parancshelyettesitesre, csak backtick. A $(..) talalmany tudtommal a Korn-shellben jelent meg, onnan kerult at a POSIX-szabvanyba, majd a bash-ba. Szoval ovatosan.

[quote:ab29400e41="Celtic"]Koszi, holnap kiprobalom a melohelyen. Mondjuk, legjobban egy (teljes, magyar :) awk-leirasnak orulnek :)

http://www.sect.mce.hw.ac.uk/~peteri/gawk/index.html
A GAWK felhasználói kézikönyve magyarul

[quote:36d936c3e6="Zahy"]
Ha viszont felmerul a portabilitas, akkor - nekem legalabbis - a kulonbozo sh-szintaxisu shellek jutnak az eszembe (sh/ksh/ash/bash/zsh/stb), ahol is meg ma is az eredeti Bourn-shell (es nem a bash) az etalon (es a kompatibilitas alapja). Abban pedig nem volt $(..) szintaxis a parancshelyettesitesre, csak backtick. A $(..) talalmany tudtommal a Korn-shellben jelent meg, onnan kerult at a POSIX-szabvanyba, majd a bash-ba. Szoval ovatosan.

Az emlitett shellek mindegyiken mukodik a $() (kiveve Solaris /bin/sh-t, ami nem is teljesen bourne shell). Legalabbis itt debianon a dash (ash), posh, ksh, pdksh, bash, zsh shellekkel ment, FreeBSD /bin/sh -val detto.

Solaris 9 es Ultrix 4.2 kivetelevel $() mindenhol mukodott a dolog. De solarisnal ismert, hogy /bin/sh nem bourne shell, Ultrix 4.2 meg szerintem irdatlanul regi, talan meg POSIX sem volt akkoriban O:)

Óh, hát a HUP-on is fent van!
http://hup.hu/old/gawk/tobb/gawk_toc.html

[quote:03e5d80dae="algernon"][quote:03e5d80dae="Zahy"]
A $(..) talalmany tudtommal a Korn-shellben jelent meg, onnan kerult at a POSIX-szabvanyba, majd a bash-ba. Szoval ovatosan.

Az emlitett shellek mindegyiken mukodik a $() (kiveve Solaris /bin/sh-t, ami nem is teljesen bourne shell). Legalabbis itt debianon a dash (ash), posh, ksh, pdksh, bash, zsh shellekkel ment, FreeBSD /bin/sh -val detto.

Solaris 9 es Ultrix 4.2 kivetelevel $() mindenhol mukodott a dolog. De solarisnal ismert, hogy /bin/sh nem bourne shell, Ultrix 4.2 meg szerintem irdatlanul regi, talan meg POSIX sem volt akkoriban O:)

1) Erdekelne, hogy ez a Solaris sh-ja nem Bourne-shell, ez honnan jon. (En ugy tudom, hogy de igen, csak van/volt benne ne'mi bug - ha jol emlekszem az Autotools - konyv "hordozhato script irasa" reszben olvastam mindenfele horrorokat a Solaris sh-jarol.)
2) Probaltad pl. AIX-en (sh-val, es nem ksh-val, bsh-val), Tru64-en (sh-val es nem ksh-val), netan IRIX-en ( -"- ) meg mason is? Csak mert azert ezek a futottak meg :-) rendszerek azert tartalmaznak a mai napig Bourne-shell -t.
3) a kulonbozo ksh-k, zsh nem er, eleve leirtam, hogy azokban mar van ilyen. A FreeBSD-s sh POSIX-kompatibilis akar lenni (mint a bash), tehat nem er. De mondjuk FreeBSD-n ports-ban van shells/v7sh - no azt nezd meg :-)
Szoval kivel akarunk kompatibilisek lenni. Mert ha a Bourne-shell-lel, akkor az mas szintaxist kivan meg, mint ha pl. a POSIX szabvannyal. Amugy a bash par dologban maskent viselkedik, mint mas, ugyszinten POSIX-kompatibilisnek kikialtott shell.
Es ujra es ujra a .sig-emet hozom fel peldakent. Ezt ksh es POSIX-shellek megeszik, de zsh/bash pl. nem, holott kene nekik. (Az alantiban a /bin/ksh persze nem kell, es az egesz egy db sor):
[code:1:03e5d80dae]
#!/bin/ksh
Z='21N16I25C25E30, 40M30E33E25T15U!' ;IFS=' ABCDEFGHIJKLMNOPQRSTUVWXYZ ';set $Z ;for i { [[ $i = ? ]]&&print $i&&break;[[ $i = ??? ]]&&j=$i&&i=${i%?};typeset -i40 i=8#$i;print -n ${i#???};[[ "$j" = ??? ]]&&print -n "${j#??} "&&j=;typeset +i i;};IFS=' 0123456789 ';set $Z;for i { [[ $i = , ]]&&i=2;[[ $i = ?? ]]||typeset -l i;j="$j $i";typeset +l i;};print "$j"
[/code:1:03e5d80dae][/code]

Koszi szepen. Nekem csak a C-konyv van meg (Kernighan-Ritchie), ami ebbol az antik korbol szarmazik :)
Nos pl. a pontosvesszo/uj sor sem volt megemlitve semelyik altalam latott forrasban sem :( Ha bash shellbol hivom az awk-ot, akkor sztem eleg huzos a soremeles, tehat marad a pontosvesszo. De ezt csak gondolom.
Hmm, a tr eseteben nem tudom, mire gondolsz, elvegre a tr parancs awk-on kivul, shellbol hiva tokeletesen mukodott igy. At is alakitotta az egesz filet szepen. Csakhatugye nekem csak bizonyos sorokra kellett az atalakitas. Biztos megint valamit felreertek.

[quote:8f69195254="Zahy"]
No tehát. Magyar nyelvű _jó_ awk leírást találsz a Kernighan-Pike -féle, a Műszaki Kiadó által valamikor a 80-as évek végén kiadott szürke (új kiadásban piros) borítóju "A UNIX operációs rendszer" c. könyvben. Magyar nyelvű leírást találhatsz awk-ról ezen kívül a Bagoly Zsolt - Papp Gábor által írt, a CoDe Kft által kiadott "UNIX alapismeretek" könyvben; nem mondom hogy részletes, de a lektor neve a garancia, hogy korrekt és használható :-)
Amúgy pedig az awk-ban _vagy_ pontosvesszővel választod el a parancsokat, _vagy_ külön sorba írod (pont, mint shellben). (És persze az se baj, ha külön sorban van, _és_ van pontosvessző is.) Amúgy pedig én ha awk-ban system-mel hívogatnék tr-t, akkor a tr esetében a shell elől is eltakarnám a shell számára is speciális jelentésű karaktereket.

Koszi, a masodik jo link. Emlekszem, anno lattam is (igy utolag beugrik :), sajna, csak az egyharmada magyar. Mindegy, belelapozva, megemliti az if-then-else szerkezetben a pontosvesszot, egybol szimpatikus lett :)

Update: jobban atnezve, a relevans reszek magyar nyelvuek, a hyper-funkciok angolok csak, ez tokeletes :)

[quote:7f604db73a="timar"]Óh, hát a HUP-on is fent van!
http://hup.hu/old/gawk/tobb/gawk_toc.html

[quote:8881d361ef="Zahy"]
1) Erdekelne, hogy ez a Solaris sh-ja nem Bourne-shell, ez honnan jon. (En ugy tudom, hogy de igen, csak van/volt benne ne'mi bug - ha jol emlekszem az Autotools - konyv "hordozhato script irasa" reszben olvastam mindenfele horrorokat a Solaris sh-jarol.)

Kb onnan jon, meg goolge solaris /bin/sh -rol. Mondjuk elofordulhat, hogy tevedek, es s/Bourne/POSIX/; -rol van szo.

[quote:8881d361ef="Zahy"]
2) Probaltad pl. AIX-en (sh-val, es nem ksh-val, bsh-val), Tru64-en (sh-val es nem ksh-val), netan IRIX-en ( -"- ) meg mason is? Csak mert azert ezek a futottak meg :-) rendszerek azert tartalmaznak a mai napig Bourne-shell -t.

Nem, nem probaltam, mert ilyen rendszerekhez nincs hozzaferesem jelen pillanatban.

[quote:8881d361ef="Zahy"]
Szoval kivel akarunk kompatibilisek lenni. Mert ha a Bourne-shell-lel, akkor az mas szintaxist kivan meg, mint ha pl. a POSIX szabvannyal.

POSIX-al, legalabbis en azzal kivanok kompatibilis lenni.

[quote:8881d361ef="Zahy"]
Es ujra es ujra a .sig-emet hozom fel peldakent. Ezt ksh es POSIX-shellek megeszik, de zsh/bash pl. nem, holott kene nekik.

dash es posh nem ettek meg, FreeBSD /bin/sh szinten nem, pedig mindharom POSIX. Szereny velemenyem szerint [[ ]] nem posix.

[quote:8881d361ef="The Open Group Base Specifications Issue 6
IEEE Std 1003.1, 2004 Edition"]
The following words may be recognized as reserved words on some implementations (when none of the characters are quoted), causing unspecified results:

[[ ]] function select

Magyarul [[ es ]] opcionalis, es POSIX nem hatarozza meg, mit kene csinalnia, ha epp implementalva van.

éppen csak kidobta az agyam :oops: :roll: :D

Hi!

"Lapos dugó, heges kúszó"

Ez honnan van? :)

Bocsi erre volt a válasz!

Koszonet, ez a topic most nagyon jol jott :)
Azon filozok fel napja, hogyan oldjam meg sed es awk nelkul, hogy egy fileban bizonyos kaktereket (ekezeteseket) kicsereljen. De mas ekezeteseket ne :) Es erre legegyszerubbnek a file soronkenti olvasasa tunt, de nem jottem ra, hogyan lehetne :) A read-e a legkevesbe nem gondoltam :)

Hy all!
Az érdekelne h van-evki aki tud 1 parancsot mai bashban ara jó h megszámolja 1 1 file sorainak charakter számát! NEM a WC nem jó mert az az egész file sorainak össza karakater számát csinálja viszont nekem 1 olan kellene amely külön-külön a sorok karaktereit számolja!
Előre is köszi!!!

[quote:2b3c3a1d36="saddam"]Hy all!
Az érdekelne h van-evki aki tud 1 parancsot mai bashban ara jó h megszámolja 1 1 file sorainak charakter számát! NEM a WC nem jó mert az az egész file sorainak össza karakater számát csinálja viszont nekem 1 olan kellene amely külön-külön a sorok karaktereit számolja!
Előre is köszi!!!

Pedig wc lesz az, csak ugyesen, soronkent:

[code:1:2b3c3a1d36]
IFS='
' # itt ez direkt ket sor, IFS tartalma egyetlen egy ujsor karakter
for line in $(cat file); do
echo "${line}" | wc -c
done
[/code:1:2b3c3a1d36]

Hy! Nagyon köszike! Erre nem gonodoltam volna :)! Miért is ... X)!
Köszike!

Még 1 dolog :)!

Csak annyi h nem tudok rájönni h hogyan kellen ehez hozzáfűzni a sort is aminek a karaktereit megszámolta!
Tehát pl a sor:

"Lapos dugó, heges kúszó"

és ezt kellene kiírnia:

"22 lapos dugó, heges kúszó"

Még 1* köszike!

[quote:25d64dfb13="saddam"]Még 1 dolog :)!

Csak annyi h nem tudok rájönni h hogyan kellen ehez hozzáfűzni a sort is aminek a karaktereit megszámolta!
Tehát pl a sor:

"Lapos dugó, heges kúszó"

és ezt kellene kiírnia:

"22 lapos dugó, heges kúszó"

Még 1* köszike!

A for cikluson belul a jelenlegi magot atirod, hogy ne echo "${line}" legyen, hanem echo -n "${line}", majd beirsz egy ujabb sort: echo " ${line}" (elso " utan space, vagy tab, vagy amit akarsz).

Pl ez egy megoldas ra.

De lehetne akar igy is:

[code:1:25d64dfb13]echo "$(echo "${line}" | wc -c) ${line}"[/code:1:25d64dfb13]

a ciklus magjaban.

Azért ezt tényleg tudja a bash magában is, nem kell ehhez wc:

while read i ;
do
echo "${#i} $i"
done < file

Ebből a a read olvas soronként és az eredmény az i változóban van; a ${#i} az a pedig az i változóban levő karakterek száma.

[quote:6ae5cf2e92="Zahy"]Azért ezt tényleg tudja a bash magában is, nem kell ehhez wc:

while read i ;
do
echo "${#i} $i"
done < file

Ebből a a read olvas soronként és az eredmény az i változóban van; a ${#i} az a pedig az i változóban levő karakterek száma.

/me gonosz, es portable shell kodot ir :P

a while read viszont jo otlet, az nem jutott hirtelenjeben eszembe!

[quote:6e2a429e76="algernon"]

/me gonosz, es portable shell kodot ir :P

a while read viszont jo otlet, az nem jutott hirtelenjeben eszembe!

/me még gonoszabb, mert biz a ${#i} elég régóta része a shelleknek. Ezzel szemben a
echo "$(echo "${line}" | wc -c) ${line}"
kód nem portábilis - tessen hanyattposztrófot írni, akkor az lesz!
:-)
(Szerintem a dolgot körbejártuk, jöhetnek a további kérdések. Pl. mivel a normál read lenyel egy csomó szóközt meg hanyatt-törtvonalat itt-ott, ezért helyette a nem-portábilis "read -r" kell. És akkor máris bukott ez a szép kis hordozható kód.)

Még 1* köszike!

Meg lenne még 1 kérdésem :$!

Az lenne a gondom h eddig így néz ki!

Most éppen próbálom a max elemet kikeresni!
Lényegében ki kell választanom h melyik sor a fileból a legnagyobb és annak sorszámát kiírni!

És az eddigieket is naggyon köszike!

[code:1:1f3a17af5d]
for line in $(cat file); do
echo "${line}" | wc -c
done
[/code:1:1f3a17af5d]

Csak hogy kukacoskodjak, mert jól esik :-)

Egyrészt érdemes figyelni off-by-one bugokra vagy feature-ökre, a fenti konstrukció a soremelést is beszámolja egy karakternek, nem biztos hogy ez jó nekünk.

Másrészt a "wc -c" nem karaktereket számol, hanem byte-okat. A "wc -m" számol karaktereket. ISO-8859-2 esetén a kettő egyenértékű (asszem), de például UTF-8 esetén nem.

Harmadrészt az echo hibásan működik, ha a fájl egyik sorának tartalma épp egy érvényes echo-kapcsoló, mint például "-n". Mivel az echo-nak sajnos nincs "--" argumentuma, ezért érdemes inkább printf-et használni, például:
[code:1:1f3a17af5d]
printf "%s" "$line" | wc -m
[/code:1:1f3a17af5d]

[quote:ad50899018="Zahy"][quote:ad50899018="algernon"]

/me gonosz, es portable shell kodot ir :P

a while read viszont jo otlet, az nem jutott hirtelenjeben eszembe!

/me még gonoszabb, mert biz a ${#i} elég régóta része a shelleknek. Ezzel szemben a
echo "$(echo "${line}" | wc -c) ${line}"
kód nem portábilis - tessen hanyattposztrófot írni, akkor az lesz!
:-)
(Szerintem a dolgot körbejártuk, jöhetnek a további kérdések. Pl. mivel a normál read lenyel egy csomó szóközt meg hanyatt-törtvonalat itt-ott, ezért helyette a nem-portábilis "read -r" kell. És akkor máris bukott ez a szép kis hordozható kód.)

Hm.. Igazad van, ${#i} teljesen portabilis. Viszont $(...) is az, raadasul olvashatobb, mint a backtick.

persze a forráskód nem lemaradt! :oops:

#! /bin/bash
IFS='
'
for line in $(cat $1);
do
echo "$(echo "${line}" | wc -c) ${line}" | cat >> file
done
echo "$(echo Osszesen:) $(cat $1 | wc -c) $(echo karakter)" | cat >> file
IFS='
'
for line in $(cat $1);
do
b= "${line}" | wc -c
echo $b
if [ $g -ne $b ]
then
g= $b
fi
done
echo "$(echo"$g")" | cat >> file

A hülyeségeimért amik még benne vannak:

- a b-t azért írattam ki a for cikluson belül h lássam kerül-e bele vmi , de semmi
stb... :) sorry

[quote:bfaabbbe9b="saddam"]Még 1* köszike!

Meg lenne még 1 kérdésem :$!

Az lenne a gondom h eddig így néz ki!

Most éppen próbálom a max elemet kikeresni!
Lényegében ki kell választanom h melyik sor a fileból a legnagyobb és annak sorszámát kiírni!

És az eddigieket is naggyon köszike!

ciklus ele: max=0; max_len=0; cnt=0

cikluson belulre:

cnt=$(expr ${cnt} + 1)
len=${#line}
if test $len -gt $max_len; then
max=${cnt}
max_len=${len}
fi

ciklus utan:

echo "Leghosszabb sor: ${max} (${max_len} karakter)"

(tesztelve nincs, hibak lehetnek benne)

Örök hálám!!!

Télleg köszik3!!!

Jó 8!!!

Aztan megis awk lenne, de nem akar menni....
Harom kulon scriptet probalgatok, de az a baj, hogy nem talaltam awk-hoz jo leirast, az egyik meg sem emliti az if-parancs-else szerkezetben a pontosvesszot, masik az else-t sem emliti :(
1.
#!/bin/bash
cat $1 | awk '{if (($0!~/cn=/) && ($0!~/cn:/)) print $0 else { tr [áéíóöőúüű] [aeiooouuu] } } '

2.
#!/usr/bin/awk -f
{if (($0~/cn=/) || ($0~/cn:/)) system("tr [áéíóöőúüű] [aeiooouuu] >> diae.ldif");}

3.
#!/bin/sh
cat dia.ldif | awk '{if (($0~/cn=/) || ($0~/cn:/)) {system("tr [áéíóöőúüű] [aeiooouuu]");print $0} ; print $0 }'

Egy reszlet a dia.ldif file-bol:

dn: cn=Otthon,ou=AddressBook,dc=test
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: organizationalPerson
cn: Otthon
sn: Otthon
mail: asdfafew@axelero.hu

dn: cn=Pécs Alex,ou=AddressBook,dc=test
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: organizationalPerson
cn: Pécs Alex
sn: Pécs Alex

dn: cn=Pusztai Erik,ou=AddressBook,dc=test
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: organizationalPerson
cn: Pusztai Erik
sn: Pusztai Erik

dn: cn=Rényi Anna,ou=AddressBook,dc=test
objectclass: top
objectclass: person
objectclass: inetOrgPerson
objectclass: organizationalPerson
cn: Rényi Anna
sn: Rényi Anna

A cel az lenne, hogy a cn: es cn= sorokat a 'tr' alakitsa at, vagyis csinaljon az ekezetes betukbol nem ekezetest. Persze, leginkabb Syntax errorokkal hal le a script, ecceruen nem ertem az awk mukodeset :(
Tudna valaki segiteni egy mukodo scripttel? Tehat, file-bol olvas, ha cn: vagy cn= van benne, akkor atalakitja es masik file-ba irja, ha nincs ilyen benne, akkor valtozatlanul irja a file-ba.
(Ja, az olvasas a dia.ldif, kiiras a diae.ldif lenne)
Koszi!

Huh, meg csak most jutottam hozza, hogy kiprobaljam, mikor minden normalis ember hazafele tart :(
Nagyon koszonom, szepen mukodik, esetleg meg kiegeszitem, hogy a mail mezot is javitsa, ambar ki az az idiota, aki emil-cimnek ekezetes cimet vesz fel (van, mert a minta-cimjegyzekben is volt egy....)

Szoval koszi, mukszik :)

Hi!

"Lapos dugó, heges kúszó"

Ez honnan van? :)

By(t)e
TBS::Antiemes

Akarhogy nezem, ennek mukodnie kellene:
#!/bin/sh
cat dia.ldif | awk '{if (($0~/cn=/) || ($0~/cn:/)) system("tr [áéíóöőúüű] [aeiooouuu]") print $0 }'

Es nem, a print-nel syntax error-ral megall :(

Ahogy en latom, megnezi, van-e benne cn: vagy cn=, ha van, akkor vegrehajtja a tr-t, es tovabbmegy a printre, ha nincs, nem hajt vegre semmit, egybol a printre fut. Aztan nezi a kovetkezo sort. Vag ykellene bele egy ciklus is, hogy soronkent olvassa? Jaj...Kicsit zavaros ez az awk nekem...

Oldjuk meg röviden, gyorsan, awk-kal:
[code:1:a8518883b3]
cat filename.txt | awk ' BEGIN{POS=0;LEN=0}length($0)>LEN{POS=NR;LEN=length($0)}END{print POS}'
[/code:1:a8518883b3]

Sőt, mivel a változók alapból üresek (nullák), ezért tovább rövidíthetünk:
[code:1:a8518883b3]
cat filename.txt | awk 'length($0)>LEN{POS=NR;LEN=length($0)}END{print POS}'
[/code:1:a8518883b3]

Sőt, egy további kis trükkel megspórolhatjuk a length függvény kétszeri használatát:
[code:1:a8518883b3]
cat filename.txt | awk '(A=length($0))>LEN{POS=NR;LEN=A}END{print POS}'
[/code:1:a8518883b3]

De még ez is rövidíthető, bár látszólag ellentmond a művletek precedenciájáról írottaknak, de jobban átgondolva teljesen jogos:
[code:1:a8518883b3]
cat filename.txt | awk 'LEN<A=length($0){POS=NR;LEN=A}END{print POS}'
[/code:1:a8518883b3]

És végső kegyelemdöfésként végezzük ki a cat parancsot:
[code:1:a8518883b3]
awk 'LEN<A=length($0){POS=NR;LEN=A}END{print POS}' filename.txt
[/code:1:a8518883b3]

A fentiekből kiindulva egy kis javítással az én verzióm:

[code:1:a45439ff5c]
#!/bin/sh
cat dia.ldif | awk '{if ($0~/cn[:=]/) system("echo "$0" | tr [áéíóöőuüű] [aeiooouuu]"); else print $0 }' >> diae.ldif
[/code:1:a45439ff5c]