Tekstistä osia

Onkohan jotakin päätteellä toimivaa ohjelmaa tai komentoa, jolla voisi poimia tekstistä etukäteen tiedettyjen merkkien perusteella osan ja tallentaa sen omalla nimellä. Esim. teksti:

" Tässä on esimerkiksi A eka merkki ja B toka merkki. "

Tallennettaisiin esim. (kun merkin ovat A ja B):

" eka merkki ja "

tai

" A eka merkki ja B "

Kyseessä on ilmeisesti jonkinlainen skannaaminen ?

Esimerkiksi regexp:llä onnistuu (tässä käytetty AWK:lla):

Tallennus tapahtuu ihan vain ohjaamalla STDOUT tiedostoon, eli esimerkiksi:

Kiitos,

Juuri tätä hain. Koodissa on jokin virhe, jota en ole saanut korjattua (googlaamalla ei löytynyt vastaavaa):

echo " Tässä on esimerkiksi A eka merkki ja B toka merkki. " | awk ‘{ if (match($0, /.A(.+)B./, m)) print m[1] }’ > teksti.txt
awk: line 1: syntax error at or near ,
bash: echo: write error: Broken pipe

Entä mitenkähän tuon terminaalilla olevan tekstin " Tässä on esimerkiksi A eka merkki ja B toka merkki. " voisi poimia valmiista tiedostosta, ilmeisesti jotenkin näin (oletetaan sen olevan tiedostossa “tekstialku.txt”?:

echo tekstialku.txt | awk …

vai tarvitaanko komentoa echo

[quote=“togo, post:3, topic:767”]Kiitos,

Juuri tätä hain. Koodissa on jokin virhe, jota en ole saanut korjattua (googlaamalla ei löytynyt vastaavaa):

echo " Tässä on esimerkiksi A eka merkki ja B toka merkki. " | awk ‘{ if (match($0, /.A(.+)B./, m)) print m[1] }’ > teksti.txt
awk: line 1: syntax error at or near ,
bash: echo: write error: Broken pipe[/quote]Outoa, minulla tuo ei anna mitään virheilmoitusta.

[quote=“togo, post:3, topic:767”]Entä mitenkähän tuon terminaalilla olevan tekstin " Tässä on esimerkiksi A eka merkki ja B toka merkki. " voisi poimia valmiista tiedostosta, ilmeisesti jotenkin näin (oletetaan sen olevan tiedostossa “tekstialku.txt”?:

echo tekstialku.txt | awk …

vai tarvitaanko komentoa echo[/quote]Komento cat on tuohon tarkoitukseen. cat tekstialku.txt | awk ...

Onkohan mun koneen näppäimistössä jokin vika, kokeilin netistä haettua komentoa ja virheilmoitus on sama (voiko esim. pilkun tulkinta olla erilainen):

echo ‘Finish : 02/01/2008 13:17:58 : Riihikallio (Tuusula)9.5 Km13 Km/h2008-01-02T10:17:58Z53’ | awk ‘{ if (match($0, /([0-9.]+).*</desc>/, m)) print m[1] }’

awk: line 1: syntax error at or near ,

Voisikohan noita koodeja (pilkku jne) testata erikseen ?

[quote=“togo, post:5, topic:767”]Onkohan mun koneen näppäimistössä jokin vika, kokeilin netistä haettua komentoa ja virheilmoitus on sama (voiko esim. pilkun tulkinta olla erilainen)[/quote]Oletko kopioinut koodit suoraan vai kirjoittanut ne käsin?

Kopion tekstit suoraan, mutta nyt kirjoitin ne ja virheilmoitus oli sama.

echo “abc def” | awk '{ print $0,$1 }'
abc def abc

Mikä versio awk:sta on käytössäsi? Version saat selville komennolla:awk --version

~$ awk --version
awk: not an option: --version

man awk :sta löysin seuraavan:

~$ awk -w version
awk: not an option: -w

Käyttäjärjestelmä on Ubuntu Studio 9.04

Kannattaisiko asentaa awk uudestaan , mikä alla olevista toimii ed.käskyjen avulla ?

sudo apt-get install awk

Reading package lists… Done
Building dependency tree
Reading state information… Done
Package awk is a virtual package provided by:
original-awk 2007-10-23-1
mawk 1.3.3-13ubuntu1
gawk 1:3.1.6.dfsg-0ubuntu1
You should explicitly select one to install.
E: Package awk has no installation candidate

[quote=“togo, post:9, topic:767”]~$ awk -w version
awk: not an option: -w

Käyttäjärjestelmä on Ubuntu Studio 9.04[/quote]Kokeile isoa tuplaveetä.

Kellään muulla käytössä Ubuntu (Studio)? Raportoikaa, toimiiko yllä olevat komennot.

[quote=“togo, post:10, topic:767”]Kannattaisiko asentaa awk uudestaan , mikä alla olevista toimii ed.käskyjen avulla ?[/quote]gawk:lla ainakin toimii itselläni.

-W version tosiaankin iso W:

versio oli mawk, asensin gawk :in ja komennot alkoivat toimia :slight_smile:

Kiitos paljon, hieno ohjelma !

[quote=“togo, post:12, topic:767”]versio oli mawk, asensin gawk :in ja komennot alkoivat toimia :slight_smile:

Kiitos paljon, hieno ohjelma ![/quote]Hyvä juttu, että rupesi toimimaan.

Pitääkin ruveta jatkossa käyttämään gawk -merkintää awk:n sijasta, niin tulee heti virheilmoitus jos kyseistä komentoa ei löydy. :slight_smile: