Sziasztok!
Lehet, hogy egy baromi egyszerű dolog, de sehogy sem tudom megoldani:
Így néz ki a szöveges állomány:
adat1;
adat2;adat3;adat4;
Azt szeretném, hogy ezek egy sorban legyenek. Tehát megvizsgálja és ha azt látja, hogy adat1; akkor csinál egy sortörlést, vagy backspacet...
Hiába guglizok nem találok rá megoldást sed-del...
Eredmény;
adat1;adat2;adat3;adat4;
- 1201 megtekintés
Hozzászólások
A sed alapvetően sor-orientált, tehát több sort kezelni vele macerás. Szerintem awk a megoldás.
- A hozzászóláshoz be kell jelentkezni
perl-ben viszonylag egyszerű és hordozhatóbb faék megoldás létezik, a különböző sed implementációk eltérnek tudásukban, funkciójukban gyakran a többsoros trükkök megoldásainál.
szerk: nyilván awk is jobb, speciális esetekben meg tr
szerk 2.: közben más is rájött a sed "N" utasítására, pl. egy nem egészen jó megoldás:
echo 'elso
masodik harmadik' | sed '/elso/{N};/elso.*masodik.*harmadik/{s/.*\(elso\).*\(masodik\).*\(harmadik\).*/\1 \2 \3/}'
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
Az egesz filet egy sorban akarod tudni, vagy csak az adat1; utani ujsort akarod torolni?
Ha az elobbi, akkor sed es tr meg tudja oldani (tr -d "\n" pl). Ha utobbi, akkor fordulj bizalommal awk-hoz, erdemes vele joban lenni.
- A hozzászóláshoz be kell jelentkezni
awk 'BEGIN { RS="[\n;]+"; ORS=";" } { print } END { printf "\n" }' adat.txt
- A hozzászóláshoz be kell jelentkezni
A "N" a barátod:
sed "/adat1;/ {N;s/\n//;}"
- A hozzászóláshoz be kell jelentkezni
A "\n" nem feltétlen jó választás, inkább illesszen sorszámozott mintarészletet a "masodik", "harmadik" stb. stringekre. Így POSIX-abb lesz :)
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
Ha több sor van a pufferban, valahogy csak meg kell találni a "\n"-t és tenni kell vele valamit, vagy rosszul gondolom? Mutatnál példát "\n" nélküli megoldásra?
- A hozzászóláshoz be kell jelentkezni
Talán ez?
http://hup.hu/node/95734#comment-1164263
Esetleg az /elso/ mintaillesztés után az N helyett egy ciklusba ágyazott, üres-sorokra illeszkedő N-t kell végrehajtani.
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
Ez jó akkor, ha legalább azt tudod, hogy mivel kezdődik a második sor. De megoldás, ha egyszerűnek nem is nevezhető.
- A hozzászóláshoz be kell jelentkezni
Köszi mindenkinek a gyors reakciót, a sedes megoldás bejött ! :)))
Kipróbálom mindjárt a többit is.. :)
- A hozzászóláshoz be kell jelentkezni
Ezt a témát át kellene mozgatni ide asap:
Szkriptek: Python, Perl, Bash, ...
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
+1
--
Egyre több informatikusnak van nemi élete. Hígul a szakma...
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
http://phoenix_art.extra.hu/
http://phoenix_art.wps4.info/
- A hozzászóláshoz be kell jelentkezni
Ragaszkodsz a sed-hez?
sed ":a;N;$!ba;s/\n//g" ize.txt
Egyébként tr -d "\012" < ize.txt kicsit egyszerűbb :)
a.
- A hozzászóláshoz be kell jelentkezni
Egy awk-os megfejtés:
awk 'BEGIN{FS=";"}($0=="adat1;"){printf "%s",$0};($0!="adat1;"){printf "%s\n", $0}' adat.txt
Ha a sorvégi pontosvessző lemaradhat:
awk 'BEGIN{FS=";"}($1=="adat1"){printf "%s",$0};($1!="adat1"){printf "%s\n", $0}' adat.txt
Kiegészítés:
a
printf "%s\n", $0
helyett elég
a
print $0
is.
-----
"Ha javulni látod a dolgokat, akkor valami fölött elsiklottál."
- A hozzászóláshoz be kell jelentkezni
delete new lines:
clear;echo -e "adat1;\nadat2;adat3;adat4;" | sed ':start /^.*$/N;s/\n//g; t start'
- A hozzászóláshoz be kell jelentkezni