Portál AbcLinuxu, 10. května 2025 10:58
mám-li text: fasdfa asdfasdf asfasd f asdfa asdfasdfadsdfa asdfasdf asdf asf zacatek asdfasfas dfasd fasd fasf asdf as a sdfasdfas fasdf asdfas fas asdf asdfas fasdf asf as dfasfasdf asdfas konec as dfasdfas f asdfas fasf a chci vytisknout pouze část od zacatek po konec, tj. zacatek asdfasfas dfasd fasd fasf asdf as a sdfasdfas fasdf asdfas fas asdf asdfas fasdf asf as dfasfasdf asdfas konec jak na to nejlépe pomocí awk?
#! /bin/sh section_begin=`grep -n zacatek "${0}" | head -n 1 | cut -f 1 -d : | tr -d ' '` section_end=`grep -n konec "${0}" | tail -1 | cut -f 1 -d : | tr -d ' '` tail +${settings_section_begin} subor.txt | head -n `expr ${section_end} - ${section_begin}`Upravoval som to z ineho skriptu, neskusal som to, ale vela chyb tam asi nebude.
Bezva, takže než, aby se použil jeden awk, sed, nebo perl což jsou POSIX standardy a ten soubor se načetl jen jednou, tak se načte třikrát, spustí se 13 subprocesů, použije 6 různých utilit (externích programů), otevře 9 rour...Ale ano, presne tak sa to urobi, ak je to potrebne. Sh skript nam bude fungovat aj na FreeBSD, kde nemame perl, aj na osekanych produkcnych Solarisoch, lebo aj tam to potrebujeme. Niekedy je treba si radsej ohackovat kompatibilitu tailu a grepu, pretoze nie vsetky skripty piseme pre svoj desktop, niektore piseme aj pre zakaznika, ktory ma paranoidnych administratorov, vedia oni?
sed
? Já tě snad nutím použít perl
? Takže ty máš nějakého zákazníka, který má paranoidního admina, který zakázal sed
a nezakázal grep
, cut
, head
, tail
, expr
a tr
? Toho mi ukaž. Takže ze mě nedělají blbce, vědí oni? Oni totiž neumí používat sed
a maskují to za ultra hyper velkého machírka. Krom toho původní dotaz se týkal awk
, takže se určitě ptá někdo, kdo nemá awk
, vědí oni?
sed -n '/^zacatek/,/^konec/p'nebo
perl -ne '/^zacatek/../^konec/ and print'a jak v awk?
awk '/^zacatek/,/^konec/ {print}'
awk
nepožívám, tohle jsem vyčetl za cca 1 min v jeho manuálu.
Myslím od /^zacatek/ . . . . /^konec/ =prvni /^konec/ =druhý . . . /^konec/ =n-tý /^konec/ /^konec/ =poslední
/^zacatek/
po poslední /^konec/
v sed
u například ne příliš hezké:sed -n '/^zacatek/,${H;/^konec/{s/.*//;x;s/^\n//;p;d}}'V
awk
a perl
u by to samozřejmě mělo jít mnohem jednodušeji. Po n
-tý výskyt v sedu už by byla nějaká nehezká prasárna, ale awk
a perl
u no problem, přece jen mají k dipozici proměnné.
;d
je zbytečné.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.