Portál AbcLinuxu, 14. května 2025 02:45

Dotaz: Prosba o pomoc s úpravou CSV v bash-i

3.9.2012 11:18 Peter
Prosba o pomoc s úpravou CSV v bash-i
Přečteno: 251×
Odpovědět | Admin
Pekný deň prajem osadenstvu.

Mám CSV súbor v ktorom sa v šiestom stĺpci má nachádzať telefónne číslo(a). Mám ale riadky, kde je napísané niečo v štýle: "Nemá, Odpojené, 0905123456-sused, ..." a v niektorých prípadoch je tam dokonca aj PSČ. Preto by som potreboval pomôcť s awk-om (alebo niečím iným v bash-i) a síce takto:

Prvý krok - nechaj v každom riadku v sĺpci 6 len číslice a znaky: "čiarka (,) bodkočiarka (;) lomítko (/)"

Druhý krok - vymaž všetky riadky kde sa v sĺpci 6 nenachádza minimálne 6 znakov

Vopred vám všetkým veľmi, veľmi pekne ďakujem za pomoc - a ak bude niekto blízko (KE) tak ho za to pozývam na pivo.

PS: neviete mi odporučiť niekto nejakú parádnu knihu na takéto srandy (regex, sed, awk, bash, ......) najlepšie v našom jazyku (slovenčina, čeština) aby som už nemusel tu s takými prkotinami otravovať?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.9.2012 11:37 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: Prosba o pomoc s úpravou CSV v bash-i
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pro detaily vizte manuálovou stránku příkazů cut, tr a grep, nástřel je níže.
Prvý krok - nechaj v každom riadku v sĺpci 6 len číslice a znaky: "čiarka (,) bodkočiarka (;) lomítko (/)"
cut '-d,' -f 6 <vstup.csv | tr -d '0123456789,;/
Druhý krok - vymaž všetky riadky kde sa v sĺpci 6 nenachádza minimálne 6 znakov
grep '^.......*'
PS: neviete mi odporučiť niekto nejakú parádnu knihu na takéto srandy (regex, sed, awk, bash, ......) najlepšie v našom jazyku (slovenčina, čeština) aby som už nemusel tu s takými prkotinami otravovať?

Můžu doporučit Linux: Příručka českého uživatele od Viléma Vychodila.

I am always ready to learn although I do not always like to be taught. (W. Churchill)
3.9.2012 14:52 seamus
Rozbalit Rozbalit vše Re: Prosba o pomoc s úpravou CSV v bash-i
Odpovědět | | Sbalit | Link | Blokovat | Admin
řešení se zmíněným awk:

cat file.csv | awk -F "\t" '{gsub (/[^[:digit:],;\/]/,"",$6)};$6~/....../{print $0}'

s poznámkou: uvádíte, že ..čárka a dvojčárka.. by měli zůstat v sloupci 6. Předpokládám tedy, že tyto znaky NEslouží jako oddělovače sloupců . Ve výše uvedeném příkladu uvažuji jako oddělovač tabelátor (parametr -F "\t"). Jinak podle standardu by "správně" měly být v CSV souboru sloupce oddělené čárku ("Comma Separated Values")

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.