Potrzebujesz pomocy z C, C++, perl, python, itp.
sethiel
Junior Member
Posty: 762 Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław
Post
autor: sethiel » 13 sierpnia 2012, 11:45
Mam plik tekstowy plik.txt którego zawartość wygląda tak:
Kod: Zaznacz cały
/home-data/user/nazwa katalogu/R11 463/02 OTRZYMANE/2011-09-12/110829.zip
/home-data/user/nazwa katalogu/R11 443/02 OTRZYMANE/2011-08-31/PW inst.zip
/home-data/user/nazwa katalalogu/R10 420/08 PRACE/08 PRACE.zip
wykonuję skrypt:
Kod: Zaznacz cały
#!/bin/bash
for a in `cat /home-data/user2/plik.txt`; do
echo $a
echo "aaaa"
done
to co uzyskuję to
Kod: Zaznacz cały
/home-data/user/nazwa
aaaa
katalogu/R11
aaaa
463/02
aaaa
OTRZYMANE/2011-09-12/110829.zip
aaaa
/home-data/user/nazwa
aaaa
katalogu/R11
aaaa
443/02
aaaa
OTRZYMANE/2011-08-31/PW
aaaa
inst.zip
aaaa
/home-data/user/nazwa
aaaa
katalalogu/R10
aaaa
420/08
aaaa
PRACE/08
aaaa
PRACE.zip
aaaa
Natomiast spodziewałem uzyskać:
Kod: Zaznacz cały
/home-data/user/nazwa katalogu/R11 463/02 OTRZYMANE/2011-09-12/110829.zip
aaaa
/home-data/user/nazwa katalogu/R11 443/02 OTRZYMANE/2011-08-31/PW inst.zip
aaaa
/home-data/user/nazwa katalalogu/R10 420/08 PRACE/08 PRACE.zip
aaaa
Czemu cat nie wyświetla całej linii tylko takie cuda - fragmenty do spacji?
Unit
Beginner
Posty: 356 Rejestracja: 27 marca 2007, 09:39
Post
autor: Unit » 13 sierpnia 2012, 11:52
Lepiej to rozwiązać tak:
Kod: Zaznacz cały
# while read line ; do echo $line; echo "aaa" ; done < test.txt
/home-data/user/nazwa katalogu/R11 463/02 OTRZYMANE/2011-09-12/110829.zip
aaa
/home-data/user/nazwa katalogu/R11 443/02 OTRZYMANE/2011-08-31/PW inst.zip
aaa
/home-data/user/nazwa katalalogu/R10 420/08 PRACE/08 PRACE.zip
aaa
sethiel
Junior Member
Posty: 762 Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław
Post
autor: sethiel » 13 sierpnia 2012, 13:01
Dziękuję.
lessmian2
Member
Posty: 1088 Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków
Post
autor: lessmian2 » 13 sierpnia 2012, 22:08
Unit podał już rozwiązanie, ale gwoli wyjaśnienia.
Kod: Zaznacz cały
man bash
[..]
IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value
is ``<space><tab><newline>''
[..]
Domyślnym separatorem pola jest '<space><tab><newline>' definowany za pomocą zmiennej IFS. W takim przypadku każdy wyraz oddzielony białym znakiem traktowany jest jako kolejny element i pętla iteruje po każdym ze słów tworząc takiego ładnego krzaczka jak wkleiłeś. Wystarczy sobie zdefiniować, że separatorem pola ma być nowa linia i wsio:
Kod: Zaznacz cały
IFS=$'\n'; for i in `cat tst.txt`; do echo $i; done;
/home-data/user/nazwa katalogu/R11 463/02 OTRZYMANE/2011-09-12/110829.zip
/home-data/user/nazwa katalogu/R11 443/02 OTRZYMANE/2011-08-31/PW inst.zip
/home-data/user/nazwa katalalogu/R10 420/08 PRACE/08 PRACE.zip
sethiel
Junior Member
Posty: 762 Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław
Post
autor: sethiel » 14 sierpnia 2012, 09:01
Przyznam się szczerze, że nawet jakbym przeczytał w poszukiwaniach to co wkleiłeś z:
to pewnie bym nie wiedział, że idzie o moją spację.
Dziękuję.