Portál AbcLinuxu, 7. května 2025 05:43
a=( `cat vstup.txt` )
ale protože na jednotlivých řádcích vstupního souboru je víc slov oddělených mezerou, nedaří se mi. Doufal jsem že toto pomůže:
a=( $( echo $( cat vstup.txt | sed -e "s/\(.*\)/\"\1\"/g" ) ) )
Ale i takto dostávám jednotlivé prvky v poli jako jednotlivá slova v souboru. Pravděpodobně mi uniká nějaké nutné escapování. Napadá někoho něco?
Například:
Pro soubor:
a b
c d e
f g h
dostávám:
echo ${a[2]}
"c
BTW: Toto funguje jak chci:
i=0
while read line; do
field[$i]="$line"
i=`expr $i + 1`
done < vstup.txt
Zdravím, ten první příkaz je OK. Stačí předtím nastavit proměnnou IFS
pouze na znak nového řádku (protože bash řeže řetězec na tokeny podle znaků v ní nalezených).
Čili:
IFS=$'\n'; a=(`cat vstup.txt`);
S pozdravem
- Vojta
Ještě jsem si vzpomněl na něco.
IFS
na původní hodnotu (takže si na začátku její nastavení zapamatovat do jiné proměnné)- Vojta
a = file('vstup.txt').readlines()Je asi 30x rychlejší než ten příklad v bashi. Soubor s milionem řádků je načtený za 0.7 sekund, zatímco bash se s tím patle 22 sekund. A hlavně - na tak primitivní věc by se v pythonu nikdo neptal, zatímco v bashi je to věda.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.