Strona 1 z 1

bash parsowanie łańcucha

: 29 sty 2011, 15:14
autor: yanan
Witam

Mam problem z wyciągnięciem danych z pliku. Mianowicie w pliku mam taki łańcuch:

Kod: Zaznacz cały

+CREG: 2,1,123,AC45
I teraz problem polega na tym, że muszę wyciągnąć z tego wartość 123 np do pliku a.txt oraz AC45 do pliku b.txt

Z przerzuceniem do pliku to bym sobie poradził, ale nie umiem wymyślij wyrażenia regularnego, które by wyłuskało te wartości.

Pozdrawiam

Odp: bash parsowanie łańcucha

: 29 sty 2011, 15:36
autor: azhag
Z przerzuceniem do pliku to bym sobie poradził
Zatem jak od razu wrzucić do pliku nie podaję ;)

Kod: Zaznacz cały

 echo "+CREG: 2,1,123,AC45"| awk -F, '{system("echo "$3";  echo "$4)}'

Odp: bash parsowanie łańcucha

: 29 sty 2011, 17:11
autor: yanan
No muszę powiedzieć, że jest problem z drugi parametrem :-o

Kod: Zaznacz cały

awk: line 1: runaway string constant " > paramb.txt ...
tzn. pierwszy się zapisał drugi zaś nie :) coś mu ten " przeszkadza

Odp: bash parsowanie łańcucha

: 29 sty 2011, 17:43
autor: azhag
Się rąbnąłem za pierwszym razem, jak czyściłem z zapisywania od razu.

A że widzę że kombinujesz na około:

Kod: Zaznacz cały

echo "+CREG: 2,1,123,AC45"| awk -F, '{system("echo "$3" >/tmp/a.txt;  echo "$4" >/tmp/b.txt")}'

Odp: bash parsowanie łańcucha

: 29 sty 2011, 19:03
autor: borzole
a właściwie po co używasz "system echo"?

Kod: Zaznacz cały

echo "+CREG: 2,1,123,AC45" | awk -F, '{print $4}'

Odp: bash parsowanie łańcucha

: 29 sty 2011, 19:08
autor: Dwimenor
Idąć tym tropem, po co używać AWK?

Kod: Zaznacz cały

dwimenor@19:07:24:~$ echo "+CREG: 2,1,123,AC45"|cut -f4 -d","
AC45
dwimenor@19:07:38:~$ echo "+CREG: 2,1,123,AC45"|cut -f3 -d","
123

Odp: bash parsowanie łańcucha

: 29 sty 2011, 19:09
autor: azhag
borzole pisze:a właściwie po co używasz "system echo"?
aby od razu zapisać do pliku
Dwimenor pisze:Idąć tym tropem, po co używać AWK?
z tego samego powodu

Odp: bash parsowanie łańcucha

: 29 sty 2011, 19:24
autor: borzole
można też przy użyciu wyłącznie bash

Kod: Zaznacz cały

IFS=$',' read -a x < <(echo "+CREG: 2,1,123,AC45")

echo ${x[2]} > plik1
echo ${x[3]} > plik2
nie trzeba wywoływać zewnętrznych programów
dobra dość :) , yanan chyba już dostał co chciał

Odp: bash parsowanie łańcucha

: 30 sty 2011, 14:28
autor: yanan
No pewnie, że wystarczy :) Dzięki wielkie.
Nie spodziewałem się aż takiej "kłótni"