[bash] wyszukiwanie w pliku i wypisywanie

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
xsonic90
Wygnańcy
Posty: 29
Rejestracja: 25 wrz 2007, 12:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

[bash] wyszukiwanie w pliku i wypisywanie

Post autor: xsonic90 »

Witam

Mam plik jednostki.txt

Kod: Zaznacz cały

c=1 c=2 b=r h=j g=3 g=4
I teraz tak chciał bym z tego wypisać drugie c czyli 2, pierwsze g czyli 3.
wybieranie zakresu za pomocą had i tail nie pójdzie bo długość tego pliku może się zmienić.

Wielkie dzięki za zainteresowanie
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: Dwimenor »

Kod: Zaznacz cały

#!/bin/bash

. jednostki.txt
echo $b
Zadziała pod warunkiem, że nie będzie się powtarzać, tzn nie może być dwa razy c, dwa razy g i tak dalej. Możesz nazwać je np

Kod: Zaznacz cały

c_1
c_2
g_1
g_2
i tak dalej
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
Awatar użytkownika
xsonic90
Wygnańcy
Posty: 29
Rejestracja: 25 wrz 2007, 12:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: xsonic90 »

kurcze musi być coś bardziej szczegółowego żeby uwzględniało czy 1 czy 2 ale dzięki też mi się przyda
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: Dwimenor »

Jeżeli koniecznie muszą być takie powtarzające się nazwy, to można inaczej (mniej zgrabnie). Taka wersja wymaga aby każda jednostka była w nowej linii.

Kod: Zaznacz cały

#!/bin/bash -x

#pierwsze c
c_1=`grep "c=" jednostki.txt|head -n1|cut -c3-`
echo $c_1
Albo jeden z gazyliona innych sposobów, z których każdy będzie bardziej skomplikowany od mojej pierwszej propozycji.
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
Awatar użytkownika
xsonic90
Wygnańcy
Posty: 29
Rejestracja: 25 wrz 2007, 12:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: xsonic90 »

dzięki za zainteresowanie jeśli ktoś by miał inny pomysł to proszę o podzielenie się
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: borzole »

Utwórz tablice i odwołuj się po indeksie np. pierwsze c to ${c[0]}
To jest automat, nazwy zostaną wczytane do tablicy arrays, więc łatwo je można znaleźć. Prawdę mówiąc ta taka namiastka tablicy dwu wymiarowej.

Kod: Zaznacz cały

#!/bin/bash

# zerujemy tablicę, w której będziemy przechowywać nazwy zmiennych
unset arrays

is_new_array(){
	# sprawdza, czy nazwa już istnieje w tablicy
	for v in ${arrays[*]} ; do
		[ $v == $1 ] && return 1
	done
	return 0
}

for p in $(cat ~/jednostki.txt) ; do
	name=$(echo $p | cut -d'=' -f1)
	value=$(echo $p | cut -d'=' -f2)
	# tworzona jest tablica o nazwie $name i wartości $value
	# index tablicy jest automatycznie powiększany
	eval "${name}[\${#${name}[*]}]=$value"
	# jeśli nazwa występuje pierwszy raz, dodawana jest do indeksu tablic
	is_new_array $name && arrays[${#arrays[*]}]=$name
done

echo test: jakie zmienne zostały wczytane:
for v in ${arrays[*]} ; do
	echo tablica $v
done

echo test: jakie wartości przechowują zmienne:
for v in ${arrays[*]} ; do
	echo -n tablica $v :
	for i in $(eval "echo \${$v[*]}") ; do
		echo -n $i,
	done
	echo
done


# do poczytania
# http://www.linuxjournal.com/content/bash-arrays
wyjście z uruchomienia:

Kod: Zaznacz cały

test: jakie zmienne zostały wczytane:
tablica c
tablica b
tablica h
tablica g
test: jakie wartości przechowują zmienne:
tablica c :1,2,
tablica b :r,
tablica h :j,
tablica g :3,4,
Awatar użytkownika
xsonic90
Wygnańcy
Posty: 29
Rejestracja: 25 wrz 2007, 12:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: xsonic90 »

sed had i tail spełniły moje wymagania jeszcze jedno pytanko jak z pliku usunąć spacje
LukAs
Wytworny Kaczor
Wytworny Kaczor
Posty: 284
Rejestracja: 30 paź 2005, 21:56
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [bash] wyszukiwanie w pliku i wypisywanie

Post autor: LukAs »

Raczej nadmiar lub zamiana spacji na coś innego.

Kod: Zaznacz cały

tr -s "[ ]" "[ ]"
tr  "[ ]" "_"
Więcej o mnie znajdziesz na: http://ospulse.pl
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 17 gości