Bash, wczytywanie warto

Potrzebujesz pomocy z C, C++, perl, python, itp.
m_kordi
Posty: 12
Rejestracja: 01 września 2012, 22:41

Bash, wczytywanie wartości do tablic

Post autor: m_kordi »

Witam!
Mam kilka plików z danymi znajdującymi się w 1 kolumnie:lili_data.txt, lina_data.txt, lik_data.txt. Chciałbym te dane wpisać do tablicy, ale tak by utworzyć 3 niezależne tablice z wartościami.

Próbowałam to zrobić w następujący sposób:

Kod: Zaznacz cały

for x in li
do
for y in li na k
do

zmienna=()
  k=0
  for i in `cat '$x$y'_data.txt`
  do
  '$x$y'_zmienna[k]=$i
  k=$((k+1))
 done
done
done
Niestety to nie działa. Czy macie jakiś pomysł, jak wybrnąć z tej sytuacji?
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Skoro pliki są tylko 3, to napisz te 3 pętle osobno zamiast jednej, bo zajmie to o wiele mniej czasu niż głowienie się jak to zrobić w taki sposób.
m_kordi
Posty: 12
Rejestracja: 01 września 2012, 22:41

Post autor: m_kordi »

Właśnie plików mam dużo więcej. Podałam tylko przykładowy problem. Udało mi się to napisać jako skrypt:

Kod: Zaznacz cały

 for y in lili lina lik
   do

     zmienna=()
     k=1
      for i in `cat "${x}${y}"_data.txt`
       do
         name="${x}${y}"_dim
         eval  "name[$k]=$i"

           echo -n " $name[$k] = "  
           eval echo \${name[k]}
           k=$((k+1))
       done
Teraz próbuję odwołać się do poszczególnych tablic poza pętlą:

Kod: Zaznacz cały

 echo ${"${x}${y}"_dim[1]} 
i wyskakuje i błąd:

Kod: Zaznacz cały

bad substitution
Natomiast jeśli napiszę:

Kod: Zaznacz cały

 echo ${lili_dim[1]} 
nic mi nie wyświetla.
Czy macie jakiś pomysł co z tym zrobić?
olx

Post autor: olx »

A po co Ci pętla, do wczytania tych danych? Nie prościej:

Kod: Zaznacz cały

#!/bin/bash

tablica1=(`awk ' { print $1 } ' dane1.txt`)
tablica2=(`awk ' { print $1 } ' dane2.txt`)
tablica3=(`awk ' { print $1 } ' dane3.txt`)
 
?
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

Tudzież można zrobić:

Kod: Zaznacz cały

tablica_1=( $(cat plik_1.txt) );
...
...
ODPOWIEDZ