Portál AbcLinuxu, 5. května 2025 15:04

Dotaz: cteni souboru v bashi

7.5.2012 18:24 johnyBeGood
cteni souboru v bashi
Přečteno: 630×
Odpovědět | Admin
Zdar, potreboval bych poradit. Mam log, ktery obsahuje ruzne informace ve sloupcich. Ten log potrebuju jednou za cas zpracovat a to tak, ze vezmu radek, podle prvniho sloupce vytvorim soubor kam potom nasypu obsah dalsich radku, ktere maji stejny prvni sloupec.

Stvoril jsem toto:
#/bin/bash
while read line
do
AWK=`awk {'print $1 "\n"'}`
echo -e "$line" >> "$AWK"
done < access.20120506.log
Podari se mi vypsat obsah prvniho sloupce na vystup, ale soubor se nevytvori, coz by podle me mel. Budu rad za kazdou radu, diky.

Ř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

7.5.2012 19:03 Kit
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
awk '{print $0 >>$1}' < access.20120506.log
9.5.2012 20:11 Ash | skóre: 53
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Dobré řešení, a asi první praktický příklad kdy mne nenapadá, jak to bez nějakých obskurností udělat sed-em :D
pavlix avatar 15.5.2012 09:17 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Na práci s tabulkama je sed naprosto nevhodný mimo základních věcí jako search&replace.

AWK funguje v podstatě jako běžný imperativní programovací jazyk. Psát v sedu komplikovanější zpracování textu je zvrácenost.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
15.5.2012 12:02 Ash | skóre: 53
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Není to zvrácenost, stačí to umět... A protože sed ovládám docela dobře (i když ne 100%, to ani nejde), tak jsem za svůj život zatím nenarazil na problém tohoto typu "potřebuji trochu zpracovat data", který bych musel řešít pomocí awk, vždy mi stačil sed, nebo kombinace třeba sed a bc a podobně. Ale víc bych to nerozebíral, je to jen konstatování faktu.
pavlix avatar 15.5.2012 12:16 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Není to zvrácenost, stačí to umět...
Stojím si za tím, že je to zvrácenost, z pohledu člověka který umí AWK i sed. Jediný důvod, proč takové věci dělat v sedu vidím v tom, že se člověk nechce učit AWK.
A protože sed ovládám docela dobře (i když ne 100%, to ani nejde), tak jsem za svůj život zatím nenarazil na problém tohoto typu "potřebuji trochu zpracovat data", který bych musel řešít pomocí awk, vždy mi stačil sed, nebo kombinace třeba sed a bc a podobně.
Tak to pozor, já jsem nezpochybňoval úplnost jazyka sed.
Ale víc bych to nerozebíral, je to jen konstatování faktu.
„Není to zvrácenost“ rozhodně není konstatování faktu. Je to subjektivní hodnocení.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
15.5.2012 16:28 Ash | skóre: 53
Rozbalit Rozbalit vše Re: cteni souboru v bashi
„Není to zvrácenost“ rozhodně není konstatování faktu. Je to subjektivní hodnocení.

Konstatování se týkalo toho, že jsem zatím awk nepotřeboval a stačil mi sed.
martin-ux avatar 15.5.2012 15:32 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: cteni souboru v bashi
suhlas. su veci, kde je vhodne pouzit sed, niekde awk. jednoduchy priklad v tomto threde sa da riesit aj sedom.
..when you do things right, people won't be sure you've done anything at all..
15.5.2012 16:33 Ash | skóre: 53
Rozbalit Rozbalit vše Re: cteni souboru v bashi
No, dá... přijde na to, já měl tím "řešení sedem" na mysli řešení čistě sedem ve smyslu jednoho streamu, ne kombinaci čtení bashem a zpracovávání po řádkách sedem která je samozřejmě pomalá už při poměrně malém počtu řádků a při větším počtu je to lameřina.
9.5.2012 11:50 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pretoze si awk-cku nedal $line ako vstup. Ale ked uz mas bash, tak naco awk.
while read file line; do
    echo "$file $line" >>"$file"
done < access.20120506.log
If you hold a Unix shell up to your ear, you can you hear the C.
9.5.2012 12:55 Kit
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Naco awk? Asi na to, že v awk je to cca 80× rychlejší.
David Watzke avatar 9.5.2012 13:54 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: cteni souboru v bashi
To možná je (nezkoušel jsem), ale určitě ne při tom hrůzostrašném použití, které popisuje tazatel :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
9.5.2012 14:05 Kit
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Samozřejmě jsem měl na mysli to své řešení. Změřil jsem si to na 14MB logu svého Apache. Fungovala obě řešení, ale awk bylo 80× rychlejší a pro praktické použití výhodnější.
pavlix avatar 15.5.2012 09:18 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: cteni souboru v bashi
To nepomůže někomu, kdo volá awk na data v cyklu z bashe :).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
15.5.2012 09:28 Kit
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Číst v bashi delší soubor a pro každý řádek volat nějaký další program, to je zvěrstvo. Zejména pokud ten volaný program sám umí zpracovat celý soubor a zpracování té jedné řádky mu zabere výrazně méně času, než je režie spojená s jeho spouštěním.

Vždycky se 4× rozmýšlím, než v bashi nějaký cyklus udělám, protože pro požadovaný účel zpravidla už nějaký vhodný nástroj existuje.
Josef Kufner avatar 14.5.2012 23:59 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: cteni souboru v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím, že na takovéhle věci je lepší se na Bash vykašlat a použít něco rozumnějšího, jako třeba to AWK, Python a podobné. Ono Bash je na takovéhle věci trošku neohrabaný a pomalý.
Hello world ! Segmentation fault (core dumped)

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.