금요일, 2월 01, 2008

몇가지 tip들

1. 각 row의 2번째 열부터 마지막 열까지 값의 평균, 표준편차, y low, y high를 구하려면? (신뢰구간 95%)

$ cat avg.awk => 이건 제가 짠 awk 프로그램 이름
#!/bin/gawk -f
{
sum=0
ssum=0
sd=0
avg=0
for (i=2;i<=NF;i++)
{
sum += $i
ssum += $i * $i
}
avg = sum/(NF-1)
sd = sqrt((ssum - (NF-1)*avg*avg)/(NF-1))
printf"%f %f %f %f\n", $1, avg, avg-1.96*sd/sqrt(NF-1), avg+1.96*sd/sqrt(NF-1)
}

2. 공통된 필드가 두번째 필드인 두 화일을 합하려면?
join -j 2 a.txt b.txt > ab.txt

3. 화일 하나를 1000000줄 짜리 여러개로 나누려면?
split -l 1000000 a.txt
=> 이렇게 하면 default로 x?? 인 화일들로 나눕니다.

4. 한 화일에서 두번째 column만 추려내려면?
awk '{print $2}' a.txt > a.txt.2col

5.발생 시간순서대로 sorting된 샘플들을 20초간격으로 몇개가 들어있는지 세려면?
(정확히는 아래의 프로그램은 1000000만개중 20초간격 내에 몇개가 죽었는지를 셉니다.)
$ cat count-rel.awk => 이건 제가 짠 awk 프로그램 이름
#!/bin/gawk -f
BEGIN {count = 1000000; interval=0}
{
if($1 < interval)
{count -= 1}
else
{ print count, interval; interval += 20
while (interval < $1)
{
print count, interval
interval += 20
}
count -= 1
}
}

6. 첫번째 컬럼이 숫자인 화일을 첫번째 칼럼에 대해서 소팅하려면?
sort -g a.txt > a.sorted.txt


7. gnuplot에서 rel.out 을 읽어서 그래프를 그리려면?
gnuplot> plot 'rel.out' using 1:2:3:4 with errorbars (1st column : x 축 2nd column: y축, 3rd column : 신뢰구간중 최소값, 4th column : 신뢰구간중 최대값)

8. gnuplot에서 png format으로 그래프를 출력하려면?
gnuplot> set term png
gnuplot> set output "out.png"
gnuplot> plot 'rel.out' using 1:2:3:4 with errorbars

9. gnuplot에서 eps file을 만들려면?
gnuplot > set term postscript
gnuplot> set output "output.eps"

10. gnuplot에서 데이터 1, 2에 각각 이름을 붙이고 싶은데요
gnuplot> plot 'rel.out' using 1:($1/$2) t "A", '' using 1:($1/$3) t "B"

11.gnuplot으로 함수 f(x)=sin(x) 를 그리려면?
gnuplot> plot sin(x)

12. a.txt 에서 앞에 몇줄 혹은 뒤에 몇줄만 보고 싶은데요?
앞에 열줄 head a.txt (기본은 한 열줄 나오는거 같습니다.)
뒤에 열줄 tail a.txt


이중 몇 스텝은 bash script로 짜서 한번에 일괄 실행되게 하는데에 성공했습니다. 역시 필요가 생겨야 공부해서 쓰게 되는거 같습니다.

아래는 trouble shooting. 저는 집에서는 windows xp기계에 cygwin을 깔아서 쓰고 있습니다. 예전엔 몹시 불안정했는데, 지금은 컴파일러부터 시작해서 x window까지 다 쓸만하고, 왠만한 gnu tool들은 사용가능한 것 같습니다.

13. cygwin을 쓰는데요, linux에서는 돌아가는 bash나 awk스크립트가 제대로 실행이 안되요
-> cygwin은 windows/dos 환경에서 돌아가기 때문에 기본으로는 화일이 dos/windows 용의 text로 생성됩니다. 따라서 unix용 text로 만들어 줘야 합니다. (라인 끝의 cr/lf 가 dos랑 unix랑 다릅니다.)
-> 그러면 어떻게?
dos2unix a.txt

14. script를 돌리려는데 실행이 안된다고 나오는데요?
chmod 755 a.sh

댓글 1개:

nacho :

gnuplot만 알겠구만. 대학원생활에서 기억나는건 gnuplot뿐.