리눅스에서 랜덤 하게 데이터를 추출하는 방법 2가지를 소개합니다.
2가지 방법중 shuf 명령어가 속도가 빠르니 shuf 명령어 사용을 권장합니다.
아래에 time 명령어를 활용한 sort, shuf 명령어 실행시간 테스트 결과도 첨부합니다.
# sort -r [개수] | head -n [개수]
sort -r sample_apart_deal.csv | head -n 1
# sample_apart_deal.csv 파일에서 랜덤하게 1개 행을 선택
# shuf -n [개수] [파일명]
shuf -n 1 sample_apart_deal.csv
# sample_apart_deal.csv 파일에서 랜덤하게 1개행 선택
#!/bin/bash
# Using sort
# %s:Unix time (since 1970-01-01 00:00:00), %N:Nano
st_time=$(date +%s%N)
# echo "$((($end_time-$st_time) / 1000000)) sec"
sort -r /media/sf_D_DRIVE/datasets/sample_apart_deal.csv | head -n 100 > /media/sf_D_DRIVE/datasets/sort.csv
end_time=$(date +%s%N)
elapsed=`echo "($end_time-$st_time)/1000000" | bc`
elapsedSec=`echo "scale=6;$elapsed/1000" | bc | awk '{printf "%.6f", $1}'`
echo "#1 using sort\nsort -r [file_nm] | head -n 100 > [outfile] : $elapsedSec sec"
# Using shuf
st_time=$(date +%s%N)
elapsed=`echo "($end_time-$st_time)/1000000" | bc`
elapsedSec=`echo "scale=6;$elapsed/1000" | bc | awk '{printf "%.6f", $1}'`
shuf -n 100 /media/sf_D_DRIVE/datasets/sample_apart_deal.csv > /media/sf_D_DRIVE/datasets/shuf.csv
end_time=$(date +%s%N)
elapsed=`echo "($end_time-$st_time)/1000000" | bc`
elapsedSec=`echo "scale=6;$elapsed/1000" | bc | awk '{printf "%.6f", $1}'`
echo "#2 using shuf\nshuf -n 100 [file_nm] > [outfile] : $elapsedSec sec"
1. 생물정보학자의 블로그, [리눅스] 텍스트 파일에서 random으로 n개 라인 뽑기, https://korbillgates.tistory.com/88
2. Serive for Every Master님 블로그, [bash] 경과시간 출력하기, https://netmaid.tistory.com/34
[Linux] 쉘 초기화 파일(/etc/profile, bashrc, bash_profile 등) 실행 순서 및 설명 (0) | 2021.05.30 |
---|---|
[Linux] 리눅스 -dev, -devel 패키지란? (0) | 2021.05.13 |
엘라스틱서치(elasticsearch)에 IP 설정해서 외부에서 접속하기 (0) | 2020.03.30 |
scp 명령어로 파일 전송하기(AWS에서 로컬로 다운받기 예제) (0) | 2019.12.31 |
리눅스(Linux)에서 crontab을 이용해 정기작업 등록하는 방법 (0) | 2019.12.28 |