Strona 1 z 1
[bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 16:04
autor: xsonic90
Witam
Mam plik jednostki.txt
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
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 16:11
autor: Dwimenor
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
i tak dalej
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 16:16
autor: xsonic90
kurcze musi być coś bardziej szczegółowego żeby uwzględniało czy 1 czy 2 ale dzięki też mi się przyda
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 16:20
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.
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 16:31
autor: xsonic90
dzięki za zainteresowanie jeśli ktoś by miał inny pomysł to proszę o podzielenie się
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 17:30
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,
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 07 gru 2010, 19:54
autor: xsonic90
sed had i tail spełniły moje wymagania jeszcze jedno pytanko jak z pliku usunąć spacje
Odp: [bash] wyszukiwanie w pliku i wypisywanie
: 08 gru 2010, 00:05
autor: LukAs
Raczej nadmiar lub zamiana spacji na coś innego.