Nowe posty

xx Bezpieczne usunięcie ubuntu 18.10 (2)
Dzisiaj o 05:48:13
xx GMail w KDE (20)
Wczoraj o 13:49:48
xx Zmiana Nazwy użytkownika (1)
2018-10-18, 23:39:05
xx Dostęp zewnętrzny do sprzętu. (4)
2018-10-18, 22:29:25
xx Modem komórkowy z GPS - komendy AT (5)
2018-10-17, 17:58:39
xx Jak pobierać dodatki do kde? (6)
2018-10-17, 14:06:19
xx [ROZWIĄZANY] LO Writer - jak rozsunąć tekst do lewa i prawa w jednym wierszu (4)
2018-10-17, 11:57:05
xx skrypty wykonywane w crontab-ie [SElinux] (2)
2018-10-17, 10:33:12
xx Jak zmienić domyślny emulator terminala ? (4)
2018-10-14, 20:51:52
xx Javascript pasjans (1)
2018-10-14, 13:10:22

Autor Wątek: Pobranie wierszy z pliku do zmiennych  (Przeczytany 393 razy)

Offline Los_Pablos

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 10
    • Zobacz profil
    • wordpress
Pobranie wierszy z pliku do zmiennych
« dnia: 2018-09-29, 21:19:25 »
Mam problem z pobraniem do zmiennych tekstu znajdującego się w pliku, plik ma następującą strukturę
tekst|drugi tekst jako 2 zmienna|trzeci tekst ze spacjami jako 3 zmienna
tekst|drugi tekst jako 2 zmienna|trzeci tekst ze spacjami jako 3 zmienna
tekst|drugi tekst jako 2 zmienna|trzeci tekst ze spacjami jako 3 zmienna

teksty są rozdzielone "|" i z każdej linii chciałbym wyciągnąć 3 zmienne robię to w takim skryptem

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"

var=$(echo $line | awk -F"|" '{print $1,$2,$3}') 
set -- $var
zmienna1=$1
zmienna2=$2
zmienna3=$3


done < "$file"

jednak mam problem z tym zapisem ponieważ spacje uniemożliwiają mi prawidłowe przypisanie tekstów do zmiennych, czy mielibyście pomysł jak to poprawnie pobrać ?

Z góry dzięki za pomysł

Offline marcin'82

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 233
    • Zobacz profil
Odp: Pobranie wierszy z pliku do zmiennych
« Odpowiedź #1 dnia: 2018-09-29, 21:35:46 »
Stwórz jakieś przykładowe fikcyjne wartości zmiennych i pokaż cały wynik działania skryptu.
marcin82

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2411
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: Pobranie wierszy z pliku do zmiennych
« Odpowiedź #2 dnia: 2018-09-30, 00:12:33 »
Bo kto by się zastanawiał, co to znaczy IFS... A to Input Field Separator, czyli dokładnie to, czego potrzebujesz...

dane.txt
aaa|bb bb|ccc ccc ccc
ddd|ee ee|fff fff fff
ggg|hh hh|iii iii iii

skrypt.sh
#!/bin/sh

IFS="|"

while read C1 C2 C3
do
    echo "POLE1='$C1', POLE2='$C2', POLE3='$C3'"
done < dane.txt
Wynik
POLE1='aaa', POLE2='bb bb', POLE3='ccc ccc ccc'
POLE1='ddd', POLE2='ee ee', POLE3='fff fff fff'
POLE1='ggg', POLE2='hh hh', POLE3='iii iii iii'
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline Los_Pablos

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 10
    • Zobacz profil
    • wordpress
Odp: Pobranie wierszy z pliku do zmiennych
« Odpowiedź #3 dnia: 2018-10-01, 15:04:37 »
Dzięki za pomoc, mam trochę braki:/  bo tak raczej sporadyczne coś w bash próbuję czasem robić. Ustawiając IFS coś ruszyło choć nie do końca
dla pliku
asdf|asdf asdf|bardzo długi tekst ....
asdf|asdf asdf|bardzo długi tekst ....
gdy ustawiam IFS na znak "|"  poniższy kod interpretuje każdy tekst pomiędzy "|" jako nowy wiersz
IFS="|"
for wiersz in $(cat ${plik});
do
var=$(echo $wiersz | awk -F"|" '{print $1,$2,$3}') 
set -- $var

Jeśli natomiast ustawię
IFS=$'\n'
to prawidłowo pobiera wiersz jednak kod
var=$(echo $wiersz | awk -F"|" '{print $1,$2,$3}')  
set -- $var
[/code]
nie jest w stanie rozbić tego wiersza na zmienne które są rozdzielone parametrem awk -F"|"

Czy mielibyście jakąś sugestię co robię źle, dzięki z góry za pomoc.

« Ostatnia zmiana: 2018-10-01, 15:06:45 wysłana przez Los_Pablos »

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2411
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: Pobranie wierszy z pliku do zmiennych
« Odpowiedź #4 dnia: 2018-10-01, 17:06:03 »
Czy w ogóle czytałeś mój kod? Nie musisz używać tego całego potoku z AWKiem. Bash/sh sam to potrafi podzielić na tokeny.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline Los_Pablos

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 10
    • Zobacz profil
    • wordpress
Odp: Pobranie wierszy z pliku do zmiennych
« Odpowiedź #5 dnia: 2018-10-05, 13:30:24 »
Tak przeczytałem kod kilka razy nawet go testowałem jednak coś mi nie działał, teraz dochodzę do wniosku że chyba dlatego że w pliku gdzie był tekst miałem dodany tylko jeden wiersz bez znaku końca linii ..


Wielkie dzięki za pomoc! :)