배쉬 스크립트로 데이터를 랜덤하게 섞는 구문

pow5150의 이미지

안녕하세요. 또 하나의 질문을 남깁니다..
지난번 gentoo 설치때 여기서 많은 도움을 받았고, 결국 성공적으로 설치할 수 있게 되었습니다.

제가 gentoo를 설치한 이유는 머신으로 연산프로그램을 돌리기 위한 것입니다.
따라서 코드를 컴파일하여 돌리는 것 까지는 성공시켰습니다.
헌데, 작업의 성격상, 입력 데이터를 랜덤하게 섞어서 알고리즘을 돌려야 하는데,
이 과정을 배쉬 스크립트로 짜려고 하고 있습니다.

우선 현재 실행파일을 돌리는 스크립트는 아래와 같이 짜놨습니다.

if [ -e "$LINK/result.txt" ]; then
rm $LINK/result.txt
fi

if [ -e "$LINK/variable.txt" ]; then
rm $LINK/variable.txt
fi

let i=1

while [ $i -le 100 ]; do
echo "=============== Iteration: " $i "================"
cd $LINK
./river
mv last.txt evolvesinglerule-last$i.txt
mv all.txt evolvesinglerule-all$i.txt
let i=i+1
done

mv $LINK/result.txt $LINK/evolvesinglerule-result_1-100_.txt
mv $LINK/variable.txt $LINK/evolvesinglerule-variable_1-100_.txt

현재 river라는 실행 프로그램을 100회 돌리고, 매회 돌아가고 난 뒤 생성되는 결과파일들의 이름을 바꾸도록 되어 있습니다.
제일 마지막에 생성된 결과파일 역시 다른 이름으로 저장하도록 해 두었구요.

이 실행파일 안에 입력데이터를 읽어들이는 방식이 지정되어 있어서, 이 스크립트에서는 입력데이터의 형태에 관해서는 아무런 정보가 없습니다.
제가 하려고 하는 것은, 첨부된 파일과 같은 형태의 데이터가 있을 때, 데이터를 random하게 섞는 과정을 스크립트에 포함시키려는 것입니다.

우선 첨부파일로 올려둔 예시 데이터파일 (testdata.txt)을 살펴보면,
제일 첫줄에 나와있는 숫자들은 왼쪽에서부터 26 (전체 데이터 행 수; 변수명 행 제외), 6 (입력변수 수), 18 (학습에 사용할 데이터 행수), 8 (테스트에 사용할 데이터 행 수)입니다.
두번째 줄은 변수명들이 들어있는 행이며, 보시는 바와 같이 Input_0*은 입력변수들, Output은 출력변수입니다.
세번째 줄부터 각변수별 실제 데이터들이 존재합니다.

즉, 세번째줄부터 마지막 줄까지의 데이터를 행 기준으로 랜덤하게 섞어서 새로운 txt 파일을 만들고
이 파일의 이름을 testdata.txt로 우선 표시하고 (이렇게 해야 river 프로그램이 입력데이터를 인식합니다),
testdata.txt 파일을 복사하여 evolvesinglerule-random-data$i.txt로 다른이름으로 저장하기가 되도록
하려고 합니다.
그렇게 해서 최초 1회 연산이 끝나면 다시 testdata.txt를 3행부터 마지막행까지 랜덤하게 섞고,
복사해서 evolvesinglerule-random-data$i.txt로 다른이름 저장하고, 새로이 river 파일이 연산을 실행하고...
위 과정을 반복해서 100회까지 할 수 있도록 하는게 저의 궁극적인 목표입니다.

너무 설명을 장황하게 써놓아서 오히려 더 헷갈릴 수도 있겠네요.. ㅠㅠ;;
여기저기 기웃거리면서 다양한 내용을 읽어보았는데, 제가 하고자 하는 형태는 찾기가 힘들더군요...
혹시 데이터 행을 랜덤하게 섞을 때 사용되는 명령어라든지, 관련되는 문건이 있으면 도와주시면 고맙겠습니다.

항상 건승하시고, 변덕스런 날씨에 건강 유의하세요.

감사합니다.

정광석 드림.

File attachments: 
첨부파일 크기
Plain text icon testdata.txt2.21 KB
ymir의 이미지

처음 두 줄은 testdata.txt 에서 삭제하고...

echo "26	6	18	8" > new_testdata.txt
echo "Input_01	Input_02	Input_03	Input_04	Input_05	Input_06	Output" >> new_testdata.txt
cat testdata.txt | sort -R >> new_testdata.txt

와 같이 하면 매번 실행될때마다 random sort 된 new_testdata.txt 가 생길겁니다.

sort -R 대신 shuf 명령을 써도 됩니다.

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

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

pow5150의 이미지

단 몇줄의 코드로 거의 2주가량을 머리털 뽑으면서 고민했던 것을 해결해 주셨네요.
정말 고맙습니다. ^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.