여러 열이 포함된 파일이 있습니다. 이 파일에 있는 두 열의 값을 기반으로 추가 열을 생성하고 싶습니다.
입력 예:
A B C D E F
1 2 T TACA A 3 2
3 4 I R 8 2
9 3 A C 9 3
- 3열과 4열(C와 D로 표시됨)의 값이 문자 A, C, G 또는 T인 경우 7열은 P여야 합니다.
- 3열과 4열의 문자가 I, D, R인 경우 7열은 Q여야 합니다.
- 3열이나 4열에 여러 글자가 있는 경우 7열은 Q여야 합니다.
원하는 출력:
A B C D E F G
1 2 T TACA A 3 2 Q
3 4 I R 8 2 Q
9 3 A C 9 3 P
열 3 값 중 일부를 "1"로 바꾸는 것을 제외하고 다음 코드가 있습니다. 열 1-6을 변경하지 않고 유지하고 싶습니다.
awk '{if ((($3!="A" && $3!="C" && $3!="G" && $3!="T") || ($3="I" || $3="D" || $3="R")) || (($4!="A" && $4!="C" && $4!="G" && $4!="T") || ($4="I" || $4="D" || $4="R"))) { $7 = "INDEL" } else { $7 = "SNP" }}1' filename > newfilename
답변1
이는 다음에 적용됩니다 mawk
.
awk 'NR==1{$7="G";print;next} \
$3~/^[A,C,G,T]$/ || $4~/^[A,C,G,T]$/ {$7="P"} \
$3~/^[I,D,R]$/ || $4~/^[I,D,R]$/ {$7="Q"} \
$4~/[A-Z][A-Z]/ || $3~/[A-Z][A-Z]/ {$7="Q"} 1' file
- 행: 첫 번째 행에 제목을 적습니다
G
. - 행:
$3
A$4
, C, G 또는 T이면$7
예입니다P
. - 행:
$3
I$4
, D 또는 R이면$7
예입니다Q
. - 행: 여러 글자
$3
인 경우 예입니다 . 마지막으로 모든 줄을 인쇄합니다.$4
$7
Q
1
답변2
이 코드는 설명이 필요 없으며 이해하기 쉽습니다. 요구 사항에 따라 마지막 else 조건을 변경하거나 무시할 수 있습니다. "input_file.txt"라는 입력 파일이 있고 "XXXX.awk"라는 다른 파일에 awk 프로그램을 생성한다고 가정합니다. 이제 명령줄을 사용하여 실행해 보세요.
awk -f XXXX.awk 입력 파일.txt
BEGIN {
FS=" ";
}
{
if(NR==1) print $0" G";
else if(length($4)>1 || length($3)>1) print $0" Q";
else if($3 ~ /[I,D,R]/ && $4 ~ /[I,D,R]/) print $0" Q";
else if($3 ~ /[A,C,G,T]/ && $4 ~ /[A,C,G,T]/) print $0" P";
else print $0" NA";
}