Category Archives: 04_Linux

GDC, MD5 확인하기

Shell script를 이용하여 MD5 checksum 확인하려고 한다. GDC(genomic data center)에서 받은 파일은 십중팔구 TSV 포맷이다.

CSV와는 달리 TSV는 IFS에 읽을 때 $’\t’를 이용한다.

md5sum으로 확인하면 hash 값과 파일 이름이 나오는데 우리는 hash 값만 필요하므로 awk를 이용한다.

#! /bin/bash
INPUT=/home/byun1114/nas/GDC_SVS/gdc_manifest_20200909_050711.txt
while IFS=$'\t' read id filename md5 size state
do
        if [ "${id}" != "id" ]; then
        md5_check=`md5sum ${filename} | awk '{ print $1 }'`
                if [ ${md5_check} = ${md5} ]; then
                echo "${filename} is passed"
                else
                echo "${filename} is not passed"
                fi
        fi
done < $INPUT

이 방법도 있을 것이고, 모든 파일에 대하여 md5 hash 값을 구한 뒤에 각각을 비교하는 방법도 있을 것 같다.

image crop by imagemagick

Linux에서 그림을 자르고 붙이는데 사용하는 많이 이용하는 프로그램은 ImageMagick이라고 한다.

~/magick {원본 파일} -crop [가로크기]x[세로크기]+[시작위치X]+[시작위치Y] +repage {만들 파일}

~/magick a.tif -crop 120x120+0+0 +repage a_1.tif

내림

bfconvert에서는 Object 위치를 좌표로 보내는 기능이 있다. 문제라면 소수점이 있는 실수라는 것이다. 그러나 픽셀에서는 소수점 값이 없으므로 정수로 변환이 필요하다. bc는 기본적으로 내림으로 결과를 처리한다고 하므로 이를 이용한다. 1로 나눈 값을 버림으로 처리하면 정수로 된다.

echo "$Location_Center_X/1" | bc

실수와 정수의 사칙연산

Shell에서는 기본적으로 정수만 사칙 연산이 된다. 그래서 8.0이 0보다 크냐고 조건문을 만들면 integer 값이 필요하다며 거부한다. 매우 빡치는 일이지만 해결 방법은 있다. 내가 이용한 방법은 bc를 이요한 것이다.

echo "사칙연산" | bc

이렇게 하면 연산이 가능하다.

12.0 > 0의 참/거짓을 판단을 하면 된다. 참일 경우는 1, 거짓일 경우는 0을 출력한다. 이를 이용한다.

if [ $(echo "${NUM1} > 0" | bc) -eq 1 ]; then
  명령어
fi

Shell 에서 CSV 파일 import(?)

R의 matrix나 data.frame 구조로 받아오는 방법을 몰라서 일단 한 줄씩 값을 읽어서 판별하는 방법을 기반으로 하였다.

INPUT1=/home/byun1114/work/MyExpt_Image.csv
while IFS=, read [컬럼 이름 모두를 빈 칸으로 구별]
do
if [ "${첫 번째 컬럼}" != "첫 번째 컬럼" ]; then
  {명령어}
fi
done < $INPUT1

여러 방법이 있는 듯 한데, 결국 쉽게 할 수 있는 것은 IFS에서 구분 기호를 ,로 입력해서 불러오는 것이었다. SQL에서와 비슷하게 read 이후에 모든 컬럼 이름을 써야 헷갈리지 않는다.

if 구절이 있는 이유는 header 값이 있는 경우를 구별할 수 없기 때문이다. 제목의 첫 줄에 명령어를 바로 적용하지 않도록 해야 한다.