[+] cat nie wy

Potrzebujesz pomocy z C, C++, perl, python, itp.
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

[+] cat nie wyświetla całej linii tylko fragmenty do spacji

Post autor: sethiel »

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?
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post autor: Unit »

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 »

Dziękuję.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

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 »

Przyznam się szczerze, że nawet jakbym przeczytał w poszukiwaniach to co wkleiłeś z:

Kod: Zaznacz cały

man bash
to pewnie bym nie wiedział, że idzie o moją spację.
Dziękuję.
ODPOWIEDZ