Re: [Linux-programlama] programlama sorusu ?

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Nejat AYDIN (nejataydin@superonline.com)
Date: Fri 06 Jan 2006 - 04:22:30 EET


Mehmet Fatih AKBULUT wrote:
> merhaba,
> 'test.txt' isimli bi dosyada 'n' tane 'new line' (\n) karakteri ile
> ayrilmis cumlem var. ve her defasinda random bi cumleyi ekrana basmak
> istiyorum.
> bunu bi script halinde nasil yapabilirim ? [scripti her cagirdigimda
> random bi cumleyi ekrana bascak.]
> yardimci olursaniz sevinirim.
> hoscakalin,
>
> [ps: ben suna benzer birsey yazdim fakat sonuc alamadim. koda bakarak
> nerde yanlis yaptigim hususunda da yazabileceginiz onerilere acigim:
>
> FILE="/root/test.txt";
> cumlesayisi=$(wc -l < "$FILE"); IFS=$'\n';
> array=($(<"$FILE"));
> echo "$ {array[$((RANDOM%cumlesayisi))] }"
          ^ ^
Problem baştaki '$' ile '{' ve sondaki ']' ile '}' arasındaki
boşluk karakterinden kaynaklanıyor. O boşluk karakterlerini
silmeniz lazım.
Diğer taraftan satır sayısını bulmak için wc komutuna gerek yok;
${#array[*]} ifadesi ile bir dizinin eleman sayısını, dolayısıyla
bu örnek için satır sayısını bulabilirsiniz. O halde script
şu şekilde de yazılabilir;

FILE="/tmp/test"
[ -r "$FILE" ] || { echo "$FILE: Böyle bir dosya yok veya izin yok";
exit 1; }
IFS=$'\n' satirlar=($(<"$FILE"))
satirsayisi=${#satirlar[*]}
echo "${satirlar[RANDOM % satirsayisi]}"

Diğer bir yöntem, dosyayı diziye depolamadan wc komutu ile satır
sayısını bulup sonra uygun aralıkta rastgele sayi üretip, sed komutu
vasıtasıyla o satırı yazmak olabilir.
Mesela;
FILE=/tmp/test
satirsayisi=$(wc -l < "$FILE")
sed -n $((RANDOM%satirsayisi+1))p "$FILE"

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.