이 글에 나온 실제 사용 예들은 계속 추가할 생각이다.
가장 최근 수정일 : 2010-09-06
2010-08-31
2010-08-10
2010-07-21
각 명령어의 간단한 설명은 이 글의 뒤쪽에 있음. 리눅스의 명령어에 관한 좋은 설명은 아래의 책 (검색링크)에 나와 있다.
좋은 책을 보면 막 홍보해주고 싶다는.
자잘한 리눅스 명령어의 묘미는 입력/출력을 다음 프로그램에 곧바로 집어 넣을 수 있다는 것. 예를 들어 보자. test.txt 파일이 다음의 내용이 다음과 같다고 하자. 각 데이터는 유전자 1개를 나타내는 ID (01045처럼) 와 유전자의 이름(BCL2처럼)으로 되어 있다.
01045:BCL2(-) 00291:CTSD
01045:BCL2(-) 00169:CALR
01045:BCL2(-) 00536:TOP2A
가장 최근 수정일 : 2010-09-06
2010-08-31
2010-08-10
2010-07-21
각 명령어의 간단한 설명은 이 글의 뒤쪽에 있음. 리눅스의 명령어에 관한 좋은 설명은 아래의 책 (검색링크)에 나와 있다.
자주 사용되는 리눅스 명령어들이 이 책에 자세하게 잘 설명되어 있다.
자잘한 리눅스 명령어의 묘미는 입력/출력을 다음 프로그램에 곧바로 집어 넣을 수 있다는 것. 예를 들어 보자. test.txt 파일이 다음의 내용이 다음과 같다고 하자. 각 데이터는 유전자 1개를 나타내는 ID (01045처럼) 와 유전자의 이름(BCL2처럼)으로 되어 있다.
01045:BCL2(-) 00291:CTSD
01045:BCL2(-) 00169:CALR
01045:BCL2(-) 00536:TOP2A
이 상황에서 BIRC5 가 몇 번 나왔는지 알고 싶다면? 그러면 다음과 같이 간단히 해결할 수 있다. 입력으로 주어진 file에서 입력으로 주어진 문자열이 검색될 때에만 출력해주는 egrep 과, 입력으로 주어진 내용의 '줄 수'를 세어 주는 wc 를 연결하여,
egrep BIRC5 test.txt | wc -l
혹은, 위의 파일에 나온 유전자의 전체 수를 알고 싶다면? 위의 파일은 실제로 tab-deliminated (공백은 사실 tab이다) 형식이고, 따라서 위의 내용에서 tab 을 new-line 으로 치환해서 출력하고, 그것을 sort 라는 명령어가 받아서 sorting 을 하고, 그것을 uniq 라는 명령어가 받아서 중복된 것을 없앤 후, 줄 수를 세는 wc 라는 명령어가 받아서 줄 수(결국 유전자 수)를 출력하게 하면 된다. 다음과 같이.
awk -F"\t" '{print $1"\n"$2}' test.txt | sort | uniq | wc -l
혹은 매우 여러 column 을 갖는 파일이 계속 만들어 지고 있다고 해보자. 그 파일 중 처음 2,3,4 번째 column 만, 파일의 내용이 추가된 것을 출력하고 싶다면 다음과 같이 하면 된다.
tail -f test.out.txt | cut
-f2,3,4
tail 은 파일의 끝의 몇 줄 (default는 10이다)을 출력한다. -f 는 그 파일에 데이터가 계속 쓰이고 있을 때, 그 뒤 내용을 특정 초마다 계속 출력하라는 의미이다. 여기에, 이렇게 출력되는 내용을 cut 이 받아서 2,3,4 번째 column 만을 다시 잘라서 출력하고 있다. 만약 tail -f 로 나오는 것을 중단하고자 하면 Control + C 를 하면 된다. 물론 background 로 돌던 프로세서는 계속 돌테고 단순히 tail -f 만 끝난 것이다.
또는, 이름이 *.cluster.txt 로 끝나는 파일들 전체에 대하여, 그 안에 Cluster 라는 문자열이 들어 있는 줄 수를 알고 싶다면? 아주 간단히 다음과 같이 하면 된다.
egrep Cluster *.cluster.txt | wc -l
즉, Cluster 라는 문자열이 들어 있는 줄을 출력하는 egrep 에, 그렇게 출력된 줄의 수를 세는 wc -l 을 연결하면 되는 것이다. 이 때, 각 *.cluster.txt 파일은 다음과 같이 생겼다.
INFO:SOURCE_FILE: NormalBreast_01302_JUN.merged.norm.rank.txt.filtered_0.95.txt
Cluster1 0.179078 580 30069 00018:FLNC 00054:ARF1 00061:ADM ...
Cluster2 0.667365 54 955 00230:CALB2 00522:CYP24A1 00770:HES1 ...
Cluster3 0.489412 51 624 00070:ALDOA 00173:SLC1A5 00557:ETFB ...
Cluster4 0.804435 32 399 00061:ADM 00232:S100A10 00526:HBEGF ...
Cluster5 0.356102 111 2174 00161:ATP2A2 00444:CREM 00501:DCN ...
Cluster6 0.673171 41 552 00061:ADM 00232:S100A10 00501:DCN ...
Cluster7 0.632768 60 1120 00161:ATP2A2 00444:CREM 01048:LIFR ...
Cluster8 0.343953 110 2062 00085:ADRA2C 00100:APP 00161:ATP2A2 ...
Cluster1 0.179078 580 30069 00018:FLNC 00054:ARF1 00061:ADM ...
Cluster2 0.667365 54 955 00230:CALB2 00522:CYP24A1 00770:HES1 ...
Cluster3 0.489412 51 624 00070:ALDOA 00173:SLC1A5 00557:ETFB ...
Cluster4 0.804435 32 399 00061:ADM 00232:S100A10 00526:HBEGF ...
Cluster5 0.356102 111 2174 00161:ATP2A2 00444:CREM 00501:DCN ...
Cluster6 0.673171 41 552 00061:ADM 00232:S100A10 00501:DCN ...
Cluster7 0.632768 60 1120 00161:ATP2A2 00444:CREM 01048:LIFR ...
Cluster8 0.343953 110 2062 00085:ADRA2C 00100:APP 00161:ATP2A2 ...
사실 이 파일은 그래프의 dense 한 영역을 찾는 MCODE의 알고리즘을 반영한 코드에서 출력한 것이다.
이번에는 다음과 같은 구조를 갖는 파일들에서,
BREAST_CANCER GSE11121 0.702507 352.596 369.157 GRADE_1 29 GRADE_2 136 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE5460 0.444481 156.257 143.272 GRADE_I 27 GRADE_II 32 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE2990 0.978588 5.61385 5.61165 GRADE1 34 GRADE2 46 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE4922 0.138463 6.58625 6.41815 GRADE1 68 GRADE2 126 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE11121 0.0257226 369.157 265.974 GRADE_2 136 GRADE_3 35 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE5460 0.444481 156.257 143.272 GRADE_I 27 GRADE_II 32 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE2990 0.978588 5.61385 5.61165 GRADE1 34 GRADE2 46 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE4922 0.138463 6.58625 6.41815 GRADE1 68 GRADE2 126 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE11121 0.0257226 369.157 265.974 GRADE_2 136 GRADE_3 35 00421:MSX2:Msh homeobox 2
각 줄은
<질병이름> <tab> <GSEID> <tab> <p-value> <tab> <mean1> <tab> <mean2> <tab> ... <tab> <gene name>
으로 되어 있는데, 이 중에서 00421의 ID를 가지면서 이름이 MSX 인 유전자이되, p-value 가 0.05 이하인 것만을 출력하고자 할 때는,
[adnoctum@bioism BreastCancer]$ more all_gene_compare*.txt | grep 00421 | grep MSX -i | awk '$3 <= 0.05'
BREAST_CANCER GSE11121 0.0257226 369.157 265.974 GRADE_2 136 GRADE_3 35 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE5460 0.0241282 143.272 114.944 GRADE_II 32 GRADE_III 70 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE4922 0.0333665 6.41815 6.11985 GRADE2 126 GRADE3 55 00421:MSX2:Msh homeobox 2
[adnoctum@bioism BreastCancer]$
BREAST_CANCER GSE5460 0.0241282 143.272 114.944 GRADE_II 32 GRADE_III 70 00421:MSX2:Msh homeobox 2
BREAST_CANCER GSE4922 0.0333665 6.41815 6.11985 GRADE2 126 GRADE3 55 00421:MSX2:Msh homeobox 2
[adnoctum@bioism BreastCancer]$
위처럼 more로 원하는 파일내용을 창으로 뿌리면서, grep 으로 00421과 MSX를 동시에 잡고, 다시 awk 로 3번째 열의 값이 0.05 보다 작은 것만 출력하도록 하면 된다.
자주 사용되는 간단한 명령어들을 살펴 보면 다음과 같다.
* grep [문자열] [file_name] : 조건에 맞는 줄만 출력한다.
* more [file_name] : file의 내용을 화면에 출력하되, 한 화면이 넘어 가면 표시를 중단, 사용자의 입력을 기다린다. Enter 키를 누르면 한 칸 을 더 출력하고, 스페이스바를 누르면 다시 한 화면의 내용을 더 출력해 준다. q 를 누르면 끝난다.
* sort [file_name] : file의 내용을 정렬해서 출력한다.
* uniq [file_name] : 연속된 두 줄이 같은 내용이면 한 줄로 만들어 준다. 이 때, uniq 명령어는 정렬을 하지는 않는다. 따라서 정렬을 하지 않고 uniq 를 하면 자신이 원하던 결과가 안 나올 수 있으니, 그럴 경우 미리 손수 sort를 해야 한다는 것을 잊지 말자.
* cut [file_name] : 원하는 column 만을 출력해 준다. 만약 file이 tab-deliminated text file 이고, 두 번째 column 만 출력하고 싶다, 와 같은 경우 유용하게 쓰인다.
* awk : 뭐랄까... 편집기라고 해야 하나, 하여튼 이것은 너무나 방대해 한 줄로 설명하기 힘들다.
* sed : awk 와 비슷. stream editor 의 약자라는데, stdout 으로 나오는 것에서 주어진 조건에 만족하는 것을 조작하거나, 할 수 있다.
* wc [file_name] : word count. 글자 수나 줄 수를 세어 준다.
* tail [file_name] : 파일의 가장 끝 몇 줄을 출력한다.
* head [file_name] : 파일의 가장 첫 몇 줄을 출력한다.
각각의 명령어에 있어 보다 자세한 설명은 man page를 참고한다.
'컴퓨터 > 리눅스' 카테고리의 다른 글
프로세스 관련 명령어들 (0) | 2010.09.06 |
---|---|
mv : 파일 이동 및 파일 이름 변경 명령어 (0) | 2010.08.31 |
리눅스 몇 가지 기초 명령어들 (0) | 2010.08.21 |
linux의 top 명령어 (0) | 2010.07.03 |
리눅스의 find 명령 (1) | 2010.05.18 |