Strona 1 z 1

[+] agrep i plik.csv

: 29 marca 2011, 23:18
autor: Czubi
Witam!
Mam następujący problem. Chciałbym z pliku o strukturze:

Kod: Zaznacz cały

16358,1,1,Głogów,ul. Wojska Polskiego 5 - blok,UMTS,2100,42160,1845,,,,4,5,6,,,,,,2010-06-26,48071,2006,
6358,3,16,Kamień Pomorski,Pl. Katedralny 2 - wieża katedry,GSM,900/1800,41018,3656,1,2,3,4,5,6,,,,,,2009-08-05,43656,,
36358,4,8,Opole,ul. Katowicka 50 - dach budynku NOT przy rogu z ul. Kościuszki,UMTS,2100,27,2299,1,?,?,,,,,,,,,2011-03-20,OPO1011,23,10812
34044,1,15,Plewiska,ul. Kolejowa - maszt własny,UMTS,2100,42040,6358,,,,4,5,6,,,,,,2010-08-03,40684,2008,10655
10887,2,15,Poznań,ul. Piłsudskiego 20 - budynek TP S.A.,GSM,900,40300,6358,,,,4,5,6,,,,,Common BCCH,2010-04-29,5218,,
12879,2,15,Poznań,ul. Piłsudskiego 20 - budynek TP S.A.,UMTS,2100,40304,6358,,,,,,,7,8,9,,,2010-12-25,5218,3021,10564
26358,1,7,Warszawa - Mokotów,ul. Puławska 17 (budynek Europlex),UMTS,2100,45106,1127,,,,,,,,,,0,pikokomórka,2010-12-14,20675,16,10688
12417,1,1,Wrocław,ul. M.Sępa-Szarzyńskiego 67b - dach budynku mieszkalnego,GSM,900/1800,42057,6358,1,2,3,,,,7,8,9,,,2009-06-10,46212,,
35436,2,1,Wrocław,ul. Wita Stwosza 28 - dach budynku biurowego,UMTS,2100,47005,6358,,,,,,,,,,0,,2011-02-02,3744,3071,10614
wyłuskać tekst

Kod: Zaznacz cały

Poznań ul. Piłsudskiego 20 - budynek TP S.A.
znam następujące wartości odpowiednich pól

Kod: Zaznacz cały

pole 2 = 2
pole 9 = 6358
jedno z pól  10-18 w tym przypadku pole 16 = 7
Czy ktoś pomoże?

Doszedłem do czegoś takiego:

Kod: Zaznacz cały

cat plik.csv | agrep '.2;........6358;.[16]7'
co zwraca następujący wynik

Kod: Zaznacz cały

12417,1,1,Wrocław,ul. M.Sępa-Szarzyńskiego 67b - dach budynku mieszkalnego,GSM,900/1800,42057,6358,1,2,3,,,,7,8,9,,,2009-06-10,46212,,
Ważne aby swobodnie manipulować zmienną na polach od 10 do 18.

: 30 marca 2011, 08:43
autor: Unit
A nie prościej:

Kod: Zaznacz cały

echo "16358,1,1,Głogów,ul. Wojska Polskiego 5 - blok,UMTS,2100,42160,1845,,,,4,5,6,,,,,,2010-06-26,48071,2006," | awk -F\, '{print $4" "$5}'

: 30 marca 2011, 10:31
autor: Czubi
To jest rozwiązanie na ostatnią część mojego pytania - wyświetlenie dwóch pól: miasto i ulica. Ale jak wskazać programowi awk właściwy wiersz. Czyli ten, w którym zawarte są wartości w odpowiedniej kolejności "2", "6358", "7"?

Dla wyjaśnienia podam, że ma mi to służyć do wyświetlania w Conky adresu stacji BTS, z którą się aktualnie łączę przez modem. Co oznacza, że będąc w innym miejscu będę znał inne wartości dla moich pól (2, 9 i 16).

: 30 marca 2011, 21:13
autor: lessmian2
W awk numer aktualnie przetwarzanego wiersza jest dostępny w zmiennej FNR - możesz ukręcić jakiegoś if'a.

: 31 marca 2011, 19:32
autor: Czubi
Dziękuję wszystkim za zaangażowanie i naprowadzenie na dobrą drogę. Mam tu na myśli awk zamiast agrep.

Przerobiłem format pliku na następujący (z innym formatowaniem mi nie wychodziło).

Kod: Zaznacz cały

16358    1    1    Głogów    ul._Wojska_Polskiego_5_-_blok    UMTS    2100    42160    1845    x    x    x    4    5    6    x    x    x    x    x    2010-06-26    48071    2006    x
6358    3    16    Kamień_Pomorski    Pl._Katedralny_2_-_wieża_katedry    GSM    900/1800    41018    3656    1    2    3    4    5    6    x    x    x    x    x    2009-08-05    43656    x    x
36358    4    8    Opole    ul._Katowicka_50_-_dach_budynku_NOT_przy_rogu_z_ul._Kościuszki    UMTS    2100    27    2299    1    ?    ?    x    x    x    x    x    x    x    x    2011-03-20    OPO1011   
34044    1    15    Plewiska    ul._Kolejowa_-_maszt_własny    UMTS    2100    42040    6358    x    x    x    4    5    6    x    x    x    x    x    2010-08-03    40684    2008    10655
10887    2    15    Poznań    ul._Piłsudskiego_20_-_budynek_TP_S.A.    GSM    900    40300    6358    x    x    x    4    5    6    x    x    x    x    Common_BCCH    2010-04-29    5218    x    x
12879    2    15    Poznań    ul._Piłsudskiego_20_-_budynek_TP_S.A.    UMTS    2100    40304    6358    x    x    x    x    x    x    7    8    9    x    x    2010-12-25    5218    3021    10564
26358    1    7    Warszawa_-_Mokotów    ul._Puławska_17_(budynek_Europlex)    UMTS    2100    45106    1127    x    x    x    x    x    x    x    x    x    0    pikokomórka    2010-12-14    20675    16    10688
12417    1    1    Wrocław    ul._M.Sępa-Szarzyńskiego_67b_-_dach_budynku_mieszkalnego    GSM    900/1800    42057    6358    1    2    3    x    x    x    7    8    9    x    x    2009-06-10    46212    x    x
35436    2    1    Wrocław    ul._Wita_Stwosza_28_-_dach_budynku_biurowego    UMTS    2100    47005    6358    x    x    x    x    x    x    x    x    x    0    x    2011-02-02    3744    3071    10614
Do tego skleciłem takie polecenie:

Kod: Zaznacz cały

awk '$6 == "UMTS" && $9 == "6358" && $16 == "7" { print $4", "$5}' btsearch.csv | tr "_" " "
Pole nr 2 nie było tak istotne jak pole nr 6
Eefekt jest co najmniej zadawalający:

Kod: Zaznacz cały

Poznań, ul. Piłsudskiego 20 - budynek TP S.A.