Portál AbcLinuxu, 27. října 2025 10:39
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í grepu 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 gzipem 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:
a co treba otevrit v OO.o Calcu (MS Excelu) a seradit podle prislusneho sloupce ?
I když ono je to spíš 12187.-12329. místo, že jo...
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
. Jinak u mě jsou součástí balíčku debianutils.
mktemp mám. Programy v /bin taky mám
Jinak zkoušel jsem to (po nahrazení $TMP něčím statickým) a je to docela ok skriptík. Některé výsledky jsou zajímavé.
PS: když něco mám dělat na cizím kompu, tak raději předpokládám, že tam nemá vůbec nic a že stroj samotný nefunguje. Člověk je pak mile překvapen, když zjistí, že ty livecd bral zbytečně.
zgrep dialogem, aby to bylo uživatelsky přítulné
. Zkusím časem dopsat podporu i pro další databáze (včetně automatického stažení a konverze).
...a pak že je statistika nuda
Takové zajímavé údaje..
Neřeknu kdybys zpracovával podobné soubory ze všech států
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
. Krásné na tom je, že to pracuje bez lidského zásahu a o to v unixech přece jde, nebo ne? Aneb proč budu 20 vteřin klikat (zvlášť v molochu jako OO), když to může udělat počítač sám a rychleji?
... 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
.
Mimochodem máš srandovní styl... nějadřív 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.