Portál AbcLinuxu, 18. června 2024 11:05


Dotaz: tisk od-do s podminkou

4.3.2008 15:56 Terka | skóre: 13
tisk od-do s podminkou
Přečteno: 250×
Odpovědět | Admin
ahoj, mam soubor:
1
..
 ahoj
..
2
..
..
..
1
..
 cau
..
2
..
------------------------------------------------------------------
.. jsou nejake radky, obecne nevim kolik

chtela bych vytisknout casti mezi 1-2 ktere obsahuji ahoj
awk '/1/,/2/ {print}' umim

ale jak vytisknout jen ty co obsahuji ahoj?
diky Terka
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.3.2008 16:06 miso | skóre: 36 | blog: iSCSI_initiator_howto | Praha
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
pokial to nieje chytak, tak:
grep ahoj subor
Project Satan infects Calculon with Werecar virus
4.3.2008 16:07 Terka | skóre: 13
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
na grep to neni protoze je tam ruzny pocet radku. idealne awk nebo perl
5.3.2008 00:55 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Ne jenom na grep, ale i na grep :-) :
$ cat soubor.txt | sed -n '/1/,/2/ p' | grep ahoj
 ahoj
$ cat soubor.txt | awk '/1/,/2/ {print}' | grep ahoj
 ahoj
PS: Ten cat tam je "na víc" ...
5.3.2008 01:32 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Možná mi něco ušlo, ale nechtěla tazatelka i ty části kolem "ahoj", a ne jenom to "ahoj"? ;-)
5.3.2008 10:13 Terka | skóre: 13
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
ano
blami avatar 5.3.2008 03:03 blami | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
zadny grep a zadne pipy. Tohle je awk oneliner.
awk '/1/,/2/ {if(match($0, "ahoj")) print;}'
5.3.2008 04:13 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Budeš na tom ještě muset zapracovat, viz zadání. ;-)
blami avatar 5.3.2008 11:43 blami | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Aha spatne jsem ho pochopil.
5.3.2008 10:12 Terka | skóre: 13
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
to zadani nebylo presne, chtela jsem cele bloky od 1 do 2
5.3.2008 04:28 Kyosuke | skóre: 28 | blog: nalady_v_modre
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bohužel můžu posloužit jen řešením v Ruby. Tohle fuguje jako filtr:
ruby -e 'STDIN.read.scan(/^1$.*?^2$/m).grep(/ahoj/).each{|x|puts x}'
Nicméně základní myšlenka by snad měla fungovat všude, kde jsou k dispozici víceřádkové regexpy. Prostě nejdřív vyjmu všechny výchozí skupiny "vocaď pocaď" (tady mezi jedničkou a dvojkou) a pak z nich vyďobu jen ty, co vyhoví podmínce.
Jak moc jsou ábíčkáři inteligentní? ;-)
5.3.2008 08:55 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/usr/bin/awk -f

BEGIN { data=""; willprint=0; }

/1/ { data=""; willprint=0; next; }
/2/ { if ( willprint == 1 ) print data; next; }
/ahoj/ { willprint=1; next; }
    { data=data $0 "\n"; next;}
5.3.2008 10:10 Terka | skóre: 13
Rozbalit Rozbalit vše Re: tisk od-do s podminkou
nakonec se mi to povedlo awk-ckem:
cat $1|\
awk '/1/,/2/  {spoj=spoj $0 "\n"}
  
  { if (spoj~"1" && spoj~"ahoj" && spoj~"2") 
    {
     {print spoj}
     {spoj=""}
    }    
  }
   '>out
diky vsem! Terka

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.