Strona 1 z 1

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

: 13 sierpnia 2012, 11:45
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?

: 13 sierpnia 2012, 11:52
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


: 13 sierpnia 2012, 13:01
autor: sethiel
Dziękuję.

: 13 sierpnia 2012, 22:08
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

: 14 sierpnia 2012, 09:01
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ę.