shell ㅠ 도와주세요

asd0201의 이미지

0부터 x까지의 숫자를 y개 발생시켜 z개의 범위로 쪼개서 정렬되는 스크립트를 짜고 싶어요 ㅠ

예를 들어 1부터 100까지의 난수를 10000개 발생시켜서 10개의 범위(0~9/10~19/20~29..... 이런식으로 ) 로 나누어 저장하고 싶은데요 ㅠ
그냥 딱 저렇게 xyz가 정해져 있으면 괜찮은데 변화하려니까 ㅠ 전혀 감을 못잡겠어요 ㅠ

힌트라도 도와주세요 ㅠ

ymir의 이미지

bash 에서라면..

$ let "num = $RANDOM % 100" && echo $num

해보시면 난수 생성에 대해 감을 잡으실거고..

loop 는 다음과 같이 while 이나 for 를 쓰면 됩니다.

$ count=0; while [ $count -lt 10000 ] ; do echo $count; let "count += 1"; done

적당히 임시파일을 생성해서 저장한 후에, 처리하면 되겠네요.

정렬이 필요하면 sort 명령을 써 보시고..

파일에서 하나씩 읽어들이는 거는.. 아래처럼 해보세요.

$ while read -r num; do echo $num; done < my_file

x 를 z 개의 구간으로 나누는 것은 위의 let 을 적당히 이용해서 연산을 해보세요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

asd0201의 이미지

echo -e "How many do you want to generate? :\c"
read gene
RANGE=10000 #max number
throw=0
z=0 # 0~999
o=0 # 1000~1999
t=0 # 2000~2999
th=0 # 3000~3999
f=0 # 4000~4999
fiv=0 # 5000~5999
six=0 # 6000~8999
se=0 # 7000~7999
ei=0 # 8000~8999
n=0 # 9000~10000
print_result ()
{

echo "in total : $add"
p1=`echo "scale=4; $z / $gene" | bc` #probability of 0~999
p2=`echo "scale=4; $o / $gene" | bc`
p3=`echo "scale=4; $t / $gene" | bc`
p4=`echo "scale=4; $th / $gene" | bc`
p5=`echo "scale=4; $f / $gene" | bc`
p6=`echo "scale=4; $fiv / $gene" | bc`
p7=`echo "scale=4; $six / $gene" | bc`
p8=`echo "scale=4; $se / $gene" | bc`
p9=`echo "scale=4; $ei / $gene" | bc`
p10=`echo "scale=4; $n / $gene" | bc`

echo "0~999 = $z , probability : $p1 "
echo "000~1999 = $o , probability : $p2 "
echo "2000~2999 = $t , probability : $p3 "
echo "3000~3999 = $th , probability : $p4 "
echo "4000~4999 = $f , probability : $p5 "
echo "5000~5999 = $fiv , probability : $p6 "
echo "6000~6999 = $six , probability : $p7"
echo "7000~7999 = $se , probability : $p8"
echo "8000~8999 = $ei , probability : $p9"
echo "9000~10000 = $n , probability : $p10"

}
update_count()
{
case "$1" in
[0-9]) let "z += 1";;
[0-9][0-9]) let "z += 1";;
[0-9][0-9][0-9]) let "z += 1";;
[1][0-9][0-9][0-9]) let "o += 1";;
[2][0-9][0-9][0-9]) let "t += 1";;
[3][0-9][0-9][0-9]) let "th += 1";;
[4][0-9][0-9][0-9]) let "f += 1";;
[5][0-9][0-9][0-9]) let "fiv += 1";;
[6][0-9][0-9][0-9]) let "six += 1";;
[7][0-9][0-9][0-9]) let "se += 1";;
[8][0-9][0-9][0-9]) let "ei += 1";;
[9][0-9][0-9][0-9]) let "n += 1";;
10000) let "n += 1";;
esac
}

echo
while [ "$throw" -lt "$gene" ]
do
number=$RANDOM
let "number %= $RANGE"
let "p1 =$number"
update_count $p1
let "throw += 1"
let "add += $number"
done
print_result

사실 차근 차근 배운게 아니라 필요할때마다 짜집기 한거라 ㅠ 너무 부족하네요 ㅠ
좀 더 도와주세요!

ymir의 이미지

#!/bin/bash
 
declare -a range_string
declare -a range_value
 
x=999
y=10000
z=10
 
let "n = x + 1"
let "r = n / z"
let "q = n / r"
 
for ((i=0; i<q; i++))
do
    let "vf = i * r"
    let "vt = (i + 1) * r - 1"
    range_string[$i]="$vf ~ $vt"
    range_value[$i]=0
done
 
for ((count=0; count<y; count++))
do
    let "num = RANDOM % n"
    let "i = num / r"
    let "range_value[i]++"
done
 
i=0 && while [ $i -lt $q ]; do echo ${range_string[$i]} : ${range_value[$i]}; let i++; done
 
exit 0;

declare -a 는 array 변수를 선언하는 지시자입니다.
이미 할만큼 다 하셨고, 값 입력받아서 범위 계산만 해주면 되는걸로 보이는데, 너무 일찍 멈추신 듯.. ;;

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.