Co

Potrzebujesz pomocy z C, C++, perl, python, itp.
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

Coś podobnego jak explode() z PHP tylko pod Linuksa

Post autor: R_Przemek »

Witam.
Mam dany tekst:
ab [,] cd [,] ef [,] gh [,] ij
i teraz chciałbym w Linuksie wypisać trzecią część tego tekstu, czyli "ef". Tekst jest pofragmentowany znakami [,] i na ich podstawie "ef" jest trzecią częścią tekstu.

W PHP było by to tak:

Kod: Zaznacz cały

$tekst = 'ab [,] cd [,] ef [,] gh [,] ij';

$exp = explode('[,]', $tekst);

$exp[2]; //-- czyli ef (trzecia część tekstu)
Ma ktoś może jakiś pomysł jak rozwiązać ten problem?
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Skoro umiesz pisać w php to napisz odpowiedni skrypt, zainstaluj php5-cli i uruchom napisany skrypt.
R_Przemek
Posty: 54
Rejestracja: 12 lipca 2008, 16:02

Post autor: R_Przemek »

A w jakim języku mogę napisać skrypt żeby można było go uruchomić pod konsolą - tzn ./skrypt?

php5-cli niestety odpada. Nie mogę instalować dodatkowych kompilatorów... muszę korzystać z tego co jest w systemie.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

#!/bin/bash
Podstawy.
Nie otwieraj przed Gwiazdką.

Co do problemu będącego tematem - rozwiązaniem będzie sed lub awk.

Na początek spróbuj: zaznajomić się z awkiem - jest jak najbardziej przyjazny dla użytkownika moim zdaniem.

Możesz: jeszcze odpalić pytona, perla, multum tego.
Jeszcze tak mi się nasunęło klik!
Awatar użytkownika
Inquistor
Beginner
Posty: 122
Rejestracja: 25 września 2007, 20:48

Post autor: Inquistor »

Coś takiego?

Kod: Zaznacz cały

echo ab [,] cd [,] ef [,] gh [,] | awk {'print $5'}
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Coś takiego?

Kod: Zaznacz cały

echo ab [,] cd [,] ef [,] gh [,] | awk {'print $5'} 
Ciutkę pokiełbasiłeś składnię, ale z grubsza tak
wypisać trzecią część tego tekstu
skoro chcesz wypisać trzecie pole, musisz wyjaśnić awkowi czym te pola są oddzielane; pomoże Ci w tym parametr --field-separator

Jeszcze taka sprawa
niepoprawnie pisze:awk {'print $5'}
poprawnie pisze:awk '{print $5}'
Awatar użytkownika
Inquistor
Beginner
Posty: 122
Rejestracja: 25 września 2007, 20:48

Post autor: Inquistor »

Nie jestem biegły w posługiwaniu się awk, ale poprawiłem w miare swoich możlwiości ta linijkę ;-)

Kod: Zaznacz cały

echo ab [,] cd [,] ef [,] gh [,] | awk '{print $3}' FS="\[,\] "
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

No i super, ale pamiętaj, że niekoniecznie to zadziała wewnątrz jakiegoś skryptu, na przykład w moim faq musiałem posłużyć się sztuczką z zapisywaniem do pliku - przeanalizuj działanie

Kod: Zaznacz cały

kej=` (...)
Nie zgłębiałem tego problemu, skrypt spełnia swoje zadanie i to mi wystarcza.
snah
Beginner
Posty: 103
Rejestracja: 19 lutego 2008, 09:09

Post autor: snah »

Inquistor pisze:Nie jestem biegły w posługiwaniu się awk, ale poprawiłem w miare swoich możlwiości ta linijkę ]echo ab [,] cd [,] ef [,] gh [,] | awk '{print $3}' FS="\[,\] "
[/code]
Nie wiem czemu, ale mam taki błąd:

Kod: Zaznacz cały

awk: cmd. line:1: warning: escape sequence `\[' treated as plain `['
awk: cmd. line:1: warning: escape sequence `\]' treated as plain `]'

U was to działa dobrze?

Metodą prób i błędów udało mi się w ten sposób:

Kod: Zaznacz cały

echo ab [,] cd [,] ef [,] gh [,] | awk '{print $3}' FS="[[],] "
Awatar użytkownika
Inquistor
Beginner
Posty: 122
Rejestracja: 25 września 2007, 20:48

Post autor: Inquistor »

snah pisze:U was to działa dobrze?
No, u mnie działa prawidłowo.
ODPOWIEDZ