Fórum Root.cz

Hlavní témata => Software => Téma založeno: scientific 16. 08. 2020, 00:20:17

Název: Hrátky s textem
Přispěvatel: scientific 16. 08. 2020, 00:20:17
Ahoj všem, prosím o banální radu.

Potřebuji poradit, jak upravovat řádky v souborech, jak potřebuji, viz příklad níže. Je mi jedno, jestli to bude sed, awk, tr, nebo co já vím. :-)

Mám soubor s řádky:

Chtěl bych výstup takto (odstranění nezajímavého balastu mezi dvěma slovy/stríngy/znaky (v našem případě znak středník z obou stran)):

Děkuji všem.


Název: Re:Hrátky s textem
Přispěvatel: jouda2 16. 08. 2020, 00:56:29
treba
cat file |cut -d ';' -f 1,3 | sed s/\;/\;\;/
Název: Re:Hrátky s textem
Přispěvatel: scientific 16. 08. 2020, 08:35:53
děkuji ti, cut chápu, sed nechápu, můžeš mi trochu popsal, jak funguje?

Nicméně si myslím, že toto řešení mi nepomůže, cut vychází z toho, že v samotném balastu už středník být nemůže, ale on tam být může.

Potřebuji spíš něco jako: cut -d ';' -f fist,last
Prostě neupínat se na ten tvar balastu, tím balastem může být úplně cokoliv, klidně 10 středníků :-D
Název: Re:Hrátky s textem
Přispěvatel: listoper 16. 08. 2020, 09:06:24
Kód: [Vybrat]
awk -F ";" '{print $1";;"$NF}' file
Název: Re:Hrátky s textem
Přispěvatel: Mirek Prýmek 16. 08. 2020, 09:47:12
Nebo sedem:

sed 's/^\(jmeno:[^;]*;\).*\(;prijmeni:.*\)$/\1\2/'

Omezení:
Název: Re:Hrátky s textem
Přispěvatel: scientific 16. 08. 2020, 10:43:48
Mirek Prýmek: Nikde jsem napsal co je nebo není středník. Moc se fixuješ na data v mém příkladu. Zleva může být jméno, ale taky to může být adresa. :-D

listoper: Díky moc, tvoje řešení funguje dokonale. Paráda, díky moc. :-)

Děkuji i všem, co se snažili mi pomoci.
Název: Re:Hrátky s textem
Přispěvatel: Ondrej Nemecek 16. 08. 2020, 11:23:08
Pokud jde o CSV data, je také možnost spouštět přímo nad CSV daty SQL příkazy. Těch projektů, které to umožňují je víc (včetně některých databází, které podporují CSV jako storage), zkusil bych například command line utility q https://github.com/harelba/q (https://github.com/harelba/q) nebo csvsql https://csvkit.readthedocs.io/en/latest/scripts/csvsql.html (https://csvkit.readthedocs.io/en/latest/scripts/csvsql.html)
Název: Re:Hrátky s textem
Přispěvatel: Mirek Prýmek 16. 08. 2020, 15:39:16
Mirek Prýmek: Nikde jsem napsal co je nebo není středník.
???

mezi dvěma slovy/stríngy/znaky (v našem případě znak středník z obou stran)
----

Pokud tam misto "jmeno" chces "bambule", tak si tam v tom vyrazu napises "bambule". Jestli misto stredniku chces zavinac, tak si tam napises zavinac. Nechapu pointu tve vyhrady.
Název: Re:Hrátky s textem
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 16. 08. 2020, 16:26:13
Mirek Prýmek: Nikde jsem napsal co je nebo není středník. Moc se fixuješ na data v mém příkladu. Zleva může být jméno, ale taky to může být adresa. :-D

listoper: Díky moc, tvoje řešení funguje dokonale. Paráda, díky moc. :-)

Děkuji i všem, co se snažili mi pomoci.

nalevo pouzit nongreedy match

Kód: [Vybrat]
perl -pe 's/(.*?;).*(;.*)/$1$2/'

oddelovac muze byt i viceznakove slovo

Kód: [Vybrat]
perl -pe 's/(.*?slovo).*(slovo.*)/$1$2/'

doporucuji pouzivat perl jako nahradu sedu, dialekt regexu v sedu je v dnesni dobe dost nestandardni
Název: Re:Hrátky s textem
Přispěvatel: tecka 16. 08. 2020, 21:16:14
doporucuji pouzivat perl jako nahradu sedu, dialekt regexu v sedu je v dnesni dobe dost nestandardni
Což v tomhle případě nehraje žádnou roli, protože nejprimitivnější regex udělá přesně to co má.
Kód: [Vybrat]
sed 's/;.*;/;;/'
Název: Re:Hrátky s textem
Přispěvatel: Mirek Prýmek 17. 08. 2020, 01:13:43
Což v tomhle případě nehraje žádnou roli, protože nejprimitivnější regex udělá přesně to co má.
Kód: [Vybrat]
sed 's/;.*;/;;/'
Pěkně! :thumbsup:
Název: Re:Hrátky s textem
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 17. 08. 2020, 16:08:36
doporucuji pouzivat perl jako nahradu sedu, dialekt regexu v sedu je v dnesni dobe dost nestandardni
Což v tomhle případě nehraje žádnou roli, protože nejprimitivnější regex udělá přesně to co má.
Kód: [Vybrat]
sed 's/;.*;/;;/'

pravda, ale pokud je oddelovac delsi slovo, musite ho opakovat v nahrade.
Název: Re:Hrátky s textem
Přispěvatel: Kit 17. 08. 2020, 19:46:55
Kód: [Vybrat]
sed 's/;.*;/;;/'

pravda, ale pokud je oddelovac delsi slovo, musite ho opakovat v nahrade.

Zde je oddělovačem středník, který kupodivu vypadá jako středník a je prezentován jedním znakem.