Sziaszok,
Egy olyan shell script-re lenne szükségem, amit egy adott text file-rol megmondja hány karakterből áll a leghosszabb sora.
Várom a tippeket!
Üdv,
Gábor
- 1117 megtekintés
Hozzászólások
- A hozzászóláshoz be kell jelentkezni
ennyire hülye lennék? Az! :-)
hálás köszönet!
- A hozzászóláshoz be kell jelentkezni
sajnos nem megy a -L kapcsoló Solarison. Tudtok más megoldást, gyorsan kellene, mert kapcsolatban vagyok egy amerikai ügyféllel egy probléma kapcsán. plz!!
- A hozzászóláshoz be kell jelentkezni
Valoszinuleg van jobb megoldas, de ez mukodik elvileg mindenhol:
(while read line; do
echo "$line" | wc -c
done) <$file | sort -r -n | head -n 1
- A hozzászóláshoz be kell jelentkezni
Csak az egyprocesszűség kedvéért egy alternatíva:
awk 'length() > max { max = length; str=$0}; END { print max, str}'
- A hozzászóláshoz be kell jelentkezni
Ne hivjunk mar kulso processzt ahhoz, amit a shell is tud:
i=0
while read line ; do
[ "$i" -lt "${#line}" ] && i="${#line}"
done < file
echo $i
- A hozzászóláshoz be kell jelentkezni
Alapvetően én is ezt mondanám, ha nem tapasztaltam volna meg már, hogy a shell sztringkezelő műveletei nem fizetődnek ki. Egy 25MB-os fájl feldolgozása:
$ time awk 'length() > max { max = length; str=$0}; END { print max, str}' file
150 #(itt megjelent a leghosszabb sor)
real 0m0.476s
user 0m0.424s
sys 0m0.052s
$ time { i=0; while read line ; do [ "$i" -lt "${#line}" ] && i="${#line}"; done < file ; echo $i ;}
150
real 0m30.876s
user 0m29.290s
sys 0m1.504s
Egy squid lognak már nem ereszteném neki, ha tengerentúli hívás keretében kéne közölnöm az eredményt. :)
- A hozzászóláshoz be kell jelentkezni
Teljesen igazad van, de azért vegyük észre, nem az awk ellen írtam (nem a Te hozzászólásodra, hanem az előtted levőre válaszoltam). Azaz reményeim szerint a 25M-s fájlon a "ciklikusan processzt kreálok a wc -nek" vs. a shell mindent megcsinál maga azért már összemérhető lenne.
- A hozzászóláshoz be kell jelentkezni
Jogos, tényleg nem figyeltem a válaszok szintjét.
- A hozzászóláshoz be kell jelentkezni
köszönöm mindenkinek a segítséget. félelmetes, hogy milyen messze vagyok a scriptprogramozástól. :-)
ha esetleg valakit érdekel, leírom miért volt ilyen fontos ez a kis script:
az egyik ügyfelünk filetransfer-t csinált Unix-ról zOS-re. a zOS-en keletkező file előre meghatározott attributummal (reclen=137) allokált. a probláma az volt, hogy bizonyos esetben "record truncated" hibával elszállt az fwrite() funkció zOS oldalon és biztos voltam benne, hogy a forrás file tartalmaz olyan sorokat amelyek hosszabbak 137 byte-nál. ma 3-ra volt megbeszélve egy telefonkonferencia az amerikai ügyféllel és "előkészültem" a 'wc -L file' paranccsal. webex-en keresztül mondtam a fazonnak, hogy miket teszteljen, aztán jól pofára estem amikor kiderült, hogy a solarison a wc nem tudja a -L kapcsolót. pár perc utánajárás után kiderült, hogy a forrásfileban nincs hiba, viszont a unix oldali transfer program hibás és bizonyos sorokat megduplázva küld, így a zOS fogadó program helyesen hibával befejezi a transfert.
a zOS oldali programot én írtam és nagy kő esett le a szívemről. ez egy tipikus példa arra, hogy órákig keresel egy hibát és a végén kiderül amit régóta sejtettél, hogy másnál van a labda.
köszi mégegyszer!
Üdv,
Gábor
- A hozzászóláshoz be kell jelentkezni