ubuntuusers.de

Jemand Lust mir eine sed-Zeile zu basteln?

Status: Gelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

ChaoZ

Avatar von ChaoZ

Anmeldungsdatum:
23. November 2005

Beiträge: 526

Wohnort: 247xx

Ich habe länger nicht mehr mit sed gearbeitet und müsst mich erst wieder reintüfteln.

Variabler Text mit immer gleicher Formatierung ist Ausgangssituation:

SN 012000
AAXX 01204
09247 46/// /0907 11024 21047 30165 40180 57004 6//// 702//
333 55300
555 01022 10000 22037 91115 91209
666 11020 21024=
NNNN

Benötigt wird der mit 1 beginnende Block in der langen Zeile. Er ist immer an der gleichen Position und beginnt immer mit 1.

Der soll dann wie folgt modifiziert werden:

  1. führende 1 entfernen

  2. wenn zweite Stelle = 1 durch - ersetzen, wenn 0 entfernen

  3. wenn dritte Stelle = 0 entfernen

  4. zwischen vierte und fünfte Stelle ein Komma

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Grüzi,

Was sind denn die typischen Merkmale deiner Datensätze?

Ist es z.B. immer die dritte Zeile im Block, der mit "SN" beginnt?

Ist es z.B. immer die "längste Zeile" ?

Beginnt die immer mit einer Null - oder wie ist das?

ChaoZ

(Themenstarter)
Avatar von ChaoZ

Anmeldungsdatum:
23. November 2005

Beiträge: 526

Wohnort: 247xx

Hier eine Erläuterung dazu: https://de.wikipedia.org/wiki/SYNOP

Da die Daten immer von der gleichen Wetterstation kommen, sollten sie immer den gleichen Aufbau haben.

Aktuell sieht meine Zeile so aus:

1
2
wget 'http://www.buedelsdorfwetter.de/synop/synop.txt' -q -O - | sed -n '3p' | sed 's/.*\(\ 1....\).*/\1/'
 11038

xubuntufriese

Avatar von xubuntufriese

Anmeldungsdatum:
3. Mai 2014

Beiträge: 340

ChaoZ schrieb:

Hier eine Erläuterung dazu: https://de.wikipedia.org/wiki/SYNOP

Da die Daten immer von der gleichen Wetterstation kommen, sollten sie immer den gleichen Aufbau haben.

Aktuell sieht meine Zeile so aus:

1
2
wget 'http://www.buedelsdorfwetter.de/synop/synop.txt' -q -O - | sed -n '3p' | sed 's/.*\(\ 1....\).*/\1/'
 11038

Muss es sed sein?

$ wget 'http://www.buedelsdorfwetter.de/synop/synop.txt' -q -O - | awk 'FNR==3{split($4,a,"");if(a[2]=="1")a[2]="-";if(a[2]=="0")a[2]="";if(a[3]=="0")a[3]="";print a[2] a[3] a[4] "," a[5]}'
-3,8

ChaoZ

(Themenstarter)
Avatar von ChaoZ

Anmeldungsdatum:
23. November 2005

Beiträge: 526

Wohnort: 247xx

Nein, ich dachte nur sed wäre da das optimale Werkzeug. 😉 Danke!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Na ja, ich würde es auch mit awk machen, aber anhand der Erläuterungen im Wiki lieber mit simpler Arithmetik:

track@lucid:~$ wget 'http://www.buedelsdorfwetter.de/synop/synop.txt' -q -O -  |  awk 'NF>9 {t=$4-10000; if(t>1000) t=1000-t; print t/10}'
-3.3 

Edit: Mit sed geht es natürlich auch, ist aber etwas mehr Gebastel:

track@lucid:~$ wget 'http://www.buedelsdorfwetter.de/synop/synop.txt' -q -O -  |  sed -r '/.{40}/!d; s/([^ ]* ){3}1(...)(.) .*/\2,\3/; s/^10?/-/; s/^00?//'
-3,3 

LG,

track

Antworten |