Portál AbcLinuxu, 12. května 2025 12:53

Dotaz: vypsat řádky se stejným polem z cvs souboru

6.12.2012 19:16 hajoucha | skóre: 22
vypsat řádky se stejným polem z cvs souboru
Přečteno: 341×
Odpovědět | Admin
Ahojda, mám soubor cvs (comma separated value) a potřebuji vypsat řádky, na kterých je stejná třetí položka. Jak na to nejlépe? Dokážu pomocí awk, sort a uniq -d vypsat příslušné položky, ale bohužel právě jenom ty položky, nikoliv celý řádek. Řádků bude nejvýše 2200 a budou dlouhé max 150 znaků.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.12.2012 20:19 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Čo myslíš tým 'stejná'? Ak tým myslíš, riadky ktoré majú napr. v 2. stĺpci slovo 'foo' tak:

awk -F , '{ if ( $2 == "foo" ) print $0 } ' < sbor.csv
6.12.2012 23:01 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
myslím tím řádky typu:
ahoj, prase, jsi, tu?
nazdar, prase, nejsem.

běžela, liška, polem
tahle, liška, je, mazaná

Tj. když se v souboru vyskytují řádky se stejnou druhou položkou, tak je vypsat. Jde mi o to zjistit jestli, a které takové jsou.

Taky by se dalo říct, že je potřeba soubor "seřadit podle druhé položky", pak "uniq -d taky podle druhé položky", ale tak, aby se vypsal celý řádek, nikoliv jenom druhá položka.
6.12.2012 23:09 l4m4
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Popis uniq ... aby se vypsal celý řádek, nikoliv jenom druhá položka nedává tak úplně smysl.

Buď chceš vypsat každou unikátní druhou položku právě jednou -- pak je zapotřebí definovat, který konkrétní z mnoha řádků, na kterých se vyskytuje, se má vypsat.

Nebo chceš vypsat všechny takové řádky, ale pak ta operace neobsauje žádný uniq, je to prostě sort -t, -k2.
7.12.2012 07:16 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
jo, nebyl to šťastný nápad. uniq to prostě neumí, neměl jsem to zmiňovat.

sort -t, -k2 seřadí ten soubor, ale vypíše ho celý. Já bych rád vypsal jenom ty řádky, jejichž druhé pole není v souboru unikátní.
6.12.2012 23:22 Kit
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vytvoř si asociativní pole. V cyklu přečti ze vstupu jeden řádek a vyber z něj klíč. Pokud je klíč již obsažen v poli, vypiš záznam z pole i řádek ze vstupu. V opačném případě přidej záznam do pole[klíč].

Nejlépe to půjde asi s AWK.
7.12.2012 00:02 František Bublík | skóre: 16
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
A co takle?

cut -d";" -f4 soubor.csv | grep prase

(v případě, že delimiter je středník) :-)
7.12.2012 07:12 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
nevím dopředu, co mám grepovat. Chci najít duplicity, nevím kolik jich je, ani jaké jsou.
7.12.2012 07:20 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
tohle vypadá slibně, díky! Vyzkouším to.
7.12.2012 14:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Jestli je to obecné CSV-čko, tak aby to bylo zábavné tak:
běžela," červená, malá a ""drzá"" liška", zoraným, polem
tahle," červená, malá a hubatá liška", je, mazaná.
jsou dva záznamy o čtyřech sloupcích, takže parser řádku musí být trochu „chytřejší“.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
7.12.2012 14:28 Kit
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Pokud by to mělo být obecné CSV, tak bych použil asi raději PHP.
7.12.2012 12:51 marek
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobry den.

pomoci napr. "awk, sort a uniq -d" ziskate jednotlive polozky, potom holt "man join".

Marek
Řešení 1× (hajoucha (tazatel))
7.12.2012 14:47 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
csvfix unique -f 3 -d
I am always ready to learn although I do not always like to be taught. (W. Churchill)
7.12.2012 17:09 hajoucha | skóre: 22
Rozbalit Rozbalit vše Re: vypsat řádky se stejným polem z cvs souboru
paráda, funguje báječně, díky!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.