Portál AbcLinuxu, 2. května 2025 11:11
Náhodou jsem kdysi našel na webu Ministerstva vnitra stránku Nejčetnější příjmení v ČR. Mužská příjmení (s četností 5 a více) jsou jako jediná dostupná i v normálním textovém formátu csv, zbytek je ve formátu MS Excell.
Prohledávání pomocí grep
u mě přestalo bavit a tak jsem si napsal v shellu překrásné uživatelské rozhraní . Skript dokonce umí automaticky stáhnout potřebný soubor, rozbalit, překonvertovat jej z CP1250 na UTF-8, nebo ISO-8859-2, odstranit DOSové konce řádků a
gzip
em zase zabalit.
#!/bin/sh # # Cetnost jmen v Ceske republice, jednoduche hledani # Potrebuje zgrep, wget, recode, gzip, unzip # autor: Michal Vyskocil # DB="m_csv.csv.gz" TMP=`mktemp` getDb() { URL="http://www.mvcr.cz/statistiky/jmena/m_csv.zip" DB_NAME="m_csv" ls $DB_NAME.zip &>/dev/null ret=$? [ $ret -ne 0 ] && wget $URL ENC="UTF-8" [ "`locale | head -n 1 | grep -i utf`" == "" ] && ENC="ISO-8859-2" unzip -qq $DB_NAME.zip recode cp1250..$ENC $DB_NAME.csv gzip $DB_NAME.csv } clean() { rm -rf $TMP } trap clean EXIT ls $DB &> /dev/null ret=$? if [ $ret != 0 ]; then dialog --yesno "Databáze nenalezena. Chcete ji stáhnout ze stránek ministerstva vnitra?" 6 45 ret=$? [ $ret -ne 0 ] && exit $ret getDb fi while true; do dialog --inputbox "Napiš hledané jméno" 7 30 2> $TMP ret=$? [ $ret -ne 0 ] && exit $ret ANSW=`cat $TMP` [ "$ANSW" == "" ] && exit 1 echo -e "Pořadí\tJméno\tČetnost" > $TMP for LINE in `zgrep -i $ANSW $DB`; do echo $LINE | tr ';' '\t' >> $TMP done dialog --textbox $TMP 20 60 done
Skript potřebuje následující programy - zgrep
, wget
, recode
, gzip
, unzip
, mktemp
a locale
. Pokud někdo zná způsob, jak v konzoli automaticky převést xls na csv, zkusím skript rozšířit i o hledání v dalších databázích. Není to moc otestované, takže si vyhrazuji právo na chyby. (Změna: dočasný soubor generuje mktemp
, zdá se, že není všude k dispozici)
$ zgrep -i Vyskočil m_csv.csv.gz 346;VYSKOČIL;1721
Tiskni
Sdílej:
tempfile
(předpokládám, že je to program na vytvoření unikátního jména tmp souboru).
mktemp
, není co řešit a nahradím to. Já sice předpokládal, že programy v /bin
budou všude, ale asi jsem se spletl debianutils
.
mktemp
mám. Programy v /bin
taky mám zgrep
dialogem, aby to bylo uživatelsky přítulné ...a pak že je statistika nuda Takové zajímavé údaje..
recode
).
$ time ./getDB real 0m0.994s user 0m0.572s sys 0m0.060sJe možné, že něco podobného půjde napsat s pomocí OpenOffice, ale to já neumím a nemám důvod se to učit
... napsal jsem to během pár minut ...A pro klid duše si ho můžu klidně pustit několikrát, abych to srovnal
Michal Vyskocil
a pak v dialozích je to zase s háčkama, jednou vykáš, potom tykáš ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.