열의 특정 패턴을 기반으로 데이터 추출

열의 특정 패턴을 기반으로 데이터 추출

다음과 같은 데이터 세트가 있습니다.

AAACCTGCAAGCGAGT-1,ENSG00000000419,DPM1,2
AAACCTGCAAGCGAGT-1,ENSG00000001497,LAS1L,1
AAACCTGCAAGCGAGT-1,ENSG00000002330,BAD,1
AAACCTGCAAGCGAGT-1,ENSG00000002549,MT-CO3,2
AAACCTGCAAGCGAGT-1,ENSG00000002586,CD99,5
AAACCTGCAAGCGAGT-1,ENSG00000002834,LASP1,1
AAACCTGCAAGCGAGT-1,ENSG00000003056,M6PR,1
AAACCTGCAAGCGAGT-1,ENSG00000003402,MT-CYB,2
AAACCTGCAAGCGAGT-1,ENSG00000004059,ARF5,2
AAACCTGCAAGCGAGT-1,ENSG00000004455,AK2,1
AAACCTGCAAGCGAGT-1,ENSG00000004468,CD38,8
AAACCTGCAAGCGAGT-1,ENSG00000004779,NDUFAB1,3
AAACCTGCAAGCGAGT-1,ENSG00000004975,DVL2,1
AAACCTGCAAGCGAGT-1,ENSG00000005022,SLC25A5,6

저는 세 번째 열에 "MT-" 패턴이 있는 미토콘드리아 유전자가 포함된 데이터를 얻고 싶습니다. 예를 들어 위 데이터 세트에서 다음을 추출하고 싶습니다.

AAACCTGCAAGCGAGT-1,ENSG00000002549,MT-CO3,2
AAACCTGCAAGCGAGT-1,ENSG00000003402,MT-CYB,2

나는 다음 명령을 사용합니다.

awk '$3 ~/^MT-/ {print $1, $2, $3, $4} final_matrix.csv

그러나 그것은 작동하지 않았습니다.

답변1

기본적으로 awk에서는 필드가 공백으로 구분되어야 합니다. 파일이 쉼표로 구분된 경우 명령 -F줄 옵션을 사용하거나 내부 awk 변수를 설정하여 FS필드 구분 기호를 적절하게 설정 해야 합니다.

출력을 쉼표로 구분하려면 이를 설정해야 합니다 OFS.

전임자.

$ awk -F, 'BEGIN{OFS=FS} $3 ~ /^MT-/ {print $1, $2, $3, $4}' final_matrix.csv
AAACCTGCAAGCGAGT-1,ENSG00000002549,MT-CO3,2
AAACCTGCAAGCGAGT-1,ENSG00000003402,MT-CYB,2

답변2

모든 답은 정확하며, 전체 줄을 인쇄할 수도 있습니다.

그리고 필드 구문 분석이 필요하지 않습니다.

awk  '/,MT-/{print}' final_matrix.csv

답변3

아이디어는 정확하지만 열 항목을 나머지 열과 구별 awk되도록 분리하는 방법을 표시하는 것을 잊었습니다 . 이제는 텍스트를 구분하기 위한 공백만 찾고 있지만 결국 전체 줄을 찾게 되는데 , 이는 전혀 발견되지 않습니다 . 따라서 이것은 단지 오류 조건으로 인해 발생하는 것입니다.$1$2$1$3$3 ~ ..전혀인쇄할 줄 수입니다.

awk -v FS=, -v OFS=, '$3 ~/^MT-/ {print $1, $2, $3, $4}' final_matrix.csv

답변4

게시한 예를 고려하면 다음과 같이 할 수 있습니다.

grep ',MT-/' final_matrix.csv

그러나 awk를 사용하고 세 번째 필드에 집중하려면 다음과 같습니다.

awk -F, '$3 ~ /^MT-/' final_matrix.csv

또는:

awk -F, 'index($3,"MT-")==1' final_matrix.csv

관련 정보