Portál AbcLinuxu, 11. května 2025 04:31

Dotaz: zpracování parametrů ze souborů

21.6.2018 10:54 PepaM
zpracování parametrů ze souborů
Přečteno: 325×
Odpovědět | Admin
Zdravím, chtěl bych napsat skript, který probere soubory na daném umístění (včetně podsložek) a vypíše parametry z nich do jednoho výstupního souboru. Vstupem jsou poštovní zprávy (txt formát) a já z nich chci vytáhnout obsah řádky začínající "From:", "To:" a "Date:" a ty pak uložit do jednoho výstupního souboru ve sloupcích oddělené TAB nebo středníkem. Každý vstupní soubor = 1 řádek.

Dá se toto napsat jako skript do BASH-e a nebo budu muset sáhnout např. po Pythonu? Děkuji za odpověď.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.6.2018 10:59 NN
Rozbalit Rozbalit vše Re: zpracování parametrů ze souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Da se to.
21.6.2018 11:10 PepaM
Rozbalit Rozbalit vše Re: zpracování parametrů ze souborů
Můžeš prosím nakopnout jak na to?
21.6.2018 11:32 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: zpracování parametrů ze souborů
Stačí ty soubory v cyklu posílat do awk, které se o vše postará. Dá se to udělat i přímo v shellu vnořeným cyklem, ale bude to výrazně pomalejší.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
21.6.2018 14:05 NN
Rozbalit Rozbalit vše Re: zpracování parametrů ze souborů
V cyklu(while,for) budes prochazat soubory(find). Ze souboru vyparsujes hodnoty(awk,sed,grep), slepis dohromady(+=) a zapises do souboru(>>).
21.6.2018 22:39 drnest | skóre: 13 | blog: Dřinu nechte strojům
Rozbalit Rozbalit vše Re: zpracování parametrů ze souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem nějak dostal chuť si s tím pohrát :-) Na parsování mailů je dobré použít něco sofistikovanějšího než grep nebo awk. Protože třeba hlavička To: může obsahovat seznam adresátů rozdělených na víc řádků. Vzpoměl jsem si na prográmek formail z balíku procmail. Předpokládám, že co soubor, to jeden mail. Takže tady by jsme měli jeden nástřel:
#!/bin/sh

find . -type f | while read fname; do
    formail -c -X From: -X To: -X Date: < "$fname" | \
awk '
/^From: / {from=$0}
/^To: /   {to=$0}
/^Date: / {date=$0}

END {
printf "%s\t%s\t%s\n", from, to, date
}
'
done

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.