A kerdesem egyszeru, a megoldasaban elakadtam. Talan egy sed/awk/grep guru tudna segiteni.
van egy text fajlom, amiben ki kene torolnom az osszes olyan sort ami datummal kezdodik es a kovetkezo sor is datummal kezdodik.
Jelesul:
a
2017
2017
2017
b
2017
c
2017
2017
||
\ /
\/
a
2017
b
2017
c
2017
a lenyeg, hogy a legutolso datum maradjon meg.
- 1335 megtekintés
Hozzászólások
Nem pontosan azt csinálja amit kértél, de a példádon ez is működik: uniq < file.txt
- A hozzászóláshoz be kell jelentkezni
A „Nem pontosan” barokkos túlzás. :-)
- A hozzászóláshoz be kell jelentkezni
Jó, hát valóban szemlesütve küldtem be mint "megoldás". :)
- A hozzászóláshoz be kell jelentkezni
Ha nincs egymás után két olyan sor, amely szöveget tartalmaz, és megegyezik egymással, akkor még jó is lehet a megoldásod. Mivel eléggé aluldefiniált a lehetséges bemeneti formátum, így ezt nem tudjuk eldönteni.
- A hozzászóláshoz be kell jelentkezni
A fajl pontosabban:
alma <= mindig betuvel kezdodik
banan <= mindig betuvel kezdodik
2017.01.01 blabla <= mindig szammal kezdodik
2017.01.05 blabla2 <= mindig szammal kezdodik
2017.01.03 blabla3 <= mindig szammal kezdodik
korte <= mindig betuvel kezdodik
narancs <= mindig betuvel kezdodik
barack <= mindig betuvel kezdodik
2017.01.12 blublu <= mindig szammal kezdodik
2017.01.08 blublu2 <= mindig szammal kezdodik
malna <= mindig betuvel kezdodik
2017.01.22 bloblo <= mindig szammal kezdodik
||
\ /
\/
alma <= mindig betuvel kezdodik
banan <= mindig betuvel kezdodik
2017.01.03 blabla3 <= mindig szammal kezdodik
korte <= mindig betuvel kezdodik
narancs <= mindig betuvel kezdodik
barack <= mindig betuvel kezdodik
2017.01.08 blublu2 <= mindig szammal kezdodik
malna <= mindig betuvel kezdodik
2017.01.22 bloblo <= mindig szammal kezdodik
Tehat az egymast koveto datumsorokbol az utolso kell, nem a kronologiailag utolso
- A hozzászóláshoz be kell jelentkezni
Pedig azt hittem csak túlgondoltad a feladványt :)
Ezt próbáld ki:
sed '$p;N;/^[0-9]\{4\}.*\n[0-9]\{4\}/D;P;D' < file.txt
- A hozzászóláshoz be kell jelentkezni
Majdnem tokeletes. Az utolso sort megduplazza. Azt egy ujabb sed-del toroltem.
Koszonom a segitseged.
- A hozzászóláshoz be kell jelentkezni
Meg egy kerdes:
azt hogy tudom megcsinalni, hogy a szammal kezdodo sor elotti newline-t toroljem? (hogy egy sorban legyen)
- A hozzászóláshoz be kell jelentkezni
A második sed azt csinálja, hogy minden pattern vizsgálatnál összefűz két sort és ha az első sor betűvel kezdődik, de a második 4db számmal, akkor összefűzi és kiírja őket a kimenetre. Ellenkező esetben csak kiírja az első sort (a sorvég karakterrel együtt).
sed '$p;N;/^[0-9]\{4\}.*\n[0-9]\{4\}/D;P;D' < file.txt | sed '$p;$!N;s/^\([a-z].*\)\n\([0-9]\{4\}.*\)$/\1\2/g;P;D'
- A hozzászóláshoz be kell jelentkezni
Nekem nem csinalja
sed (GNU sed) 4.4
- A hozzászóláshoz be kell jelentkezni
Nálam macOS alatt megy (és az első válaszomnál említett sorduplikálást sem produkálja). Ez nem GNU sed és mással most nem tudom tesztelni sajnos... :/
Szerk: ha Windowsos progi generálta a CSV-t, akkor lehet hogy nem elég a \n-t kivenni. Kicsit módosítottam, próbáld ki így (a sorduplikálásra is megoldás lehet):
sed '$!N;/^[0-9]\{4\}.*\n[0-9]\{4\}/D;P;D' < file.txt | sed '$!N;s/^\([a-z].*\)\r*\n\([0-9]\{4\}.*\)$/\1\2/g;P;D'
- A hozzászóláshoz be kell jelentkezni
Az utolso sor duplikalasat megoldotta, de nem torli a szammal kezdodo sor elotti newline-t
- A hozzászóláshoz be kell jelentkezni
ezt most ugy masoltam (talan megtartotta a sorvegeket)
ID:;00195B2FF60701080126-030D050B3005
SR;30;
ID:;00195B2FF60701081916-0D0E030C2802
SR;31;
ID:;00195B2FF60701083827-140A040F3007
SR;32;
eddig eljutottam. az SR-es sor-t kene az elozoekhez irni mondjuk egy ;-vel
ID:;00195B2FF60701080126-030D050B3005;SR;30;
ID:;00195B2FF60701081916-0D0E030C2802;SR;31;
ID:;00195B2FF60701083827-140A040F3007;SR;32;
... ahogy nezem, a sorvegek sima \n-ek.
sed '$!N;s/^\(ID.*\)\n\(SR.*\)$/\1\2/g;P;D'
csak a masodik referenciat illeszti be. Az elsot (\1) nem.
EDIT:
nem, nem; a sorvegek ^M-ek....
ok. kicsereltem am M-eket es most mukodik.
Koszonom megegyszer a segitseget.
- A hozzászóláshoz be kell jelentkezni
remove.awk:
/^[[:alpha:]]/ {
if (temp != 0) print(temp)
temp = 0
date = 0
print
}
/^[0-9]{4}.[0-9]{2}.[0-9]{2}/ {
date = 1
temp = $0
}
END { if (date == 1) print(temp) }
gawk -f remove.awk < test.txt
Kiegészítés:
De, ha csak a dátum kezdődhet számmal, akkor a második vizsgálatánál elége a
/^[[:digit:]]/ is a /[0-9]… /
helyett.
- A hozzászóláshoz be kell jelentkezni
Azon tűnődöm, hogy mi szükség van a date változóra, miért nem lehet az END ágban is if (temp != 0) vizsgálatot használni.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Azon lehet tűnődni. :-) Ez az első közelítés volt, és mivel a sedes változat jött be a kérdezőnek, így a további tűnődést feleslegesnek találtam.
- A hozzászóláshoz be kell jelentkezni
(off) Mindég érdekelt, hogy ilyen idóta formátumú szövegek honnan jönnek...
- A hozzászóláshoz be kell jelentkezni
Egy alkalmazas csv exportja.....
- A hozzászóláshoz be kell jelentkezni