특정 열의 단어가 표현식과 일치하지 않는 경우 어떻게 바꿀 수 있나요?

특정 열의 단어가 표현식과 일치하지 않는 경우 어떻게 바꿀 수 있나요?

다음 파일이 있습니다.

chr1    157784  157887  U6  0   -
chr1    564813  564881  miRNA   0   +
chr1    564879  564950  tRNA    0   -
chr1    564952  565019  tRNA    0   +
chr1    566062  566129  piRNA   0   +
chr1    566137  566205  tRNA    0   -

4열의 표현어가 "piRNA" 또는 "miRNA"로 시작하지 않는 경우에는 "rfam"이라는 단어로 대체됩니다.

예상 출력:

chr1    157784  157887  rfam    0   -
chr1    564813  564881  miRNA   0   +
chr1    564879  564950  rfam    0   -
chr1    564952  565019  fram    0   +
chr1    566062  566129  piRNA   0   +
chr1    566137  566205  rfam    0   -

참고: 필드 4에는 U6 및 tRNA뿐만 아니라 다양한 이름이 있습니다. 이는 piRNA 또는 miRNA 이외의 모든 단어에 적용되어야 합니다.

답변1

awk -v OFS='\t' '$4 !~ /^[pm]iRNA/ { $4 = "rfam" } ; { $4 = $4 ; print }' file

이것이 바로 귀하가 요청한 것입니다. 필드 4가 정규 표현식과 일치하지 않으면 ^[pm]iRNA로 설정한 rfam다음 변경 여부에 관계없이 해당 줄을 인쇄합니다.

참고: 일관된 출력을 보장하기 위해 출력 필드 구분 기호(OFS)를 탭으로 설정하고 $4 = $4인쇄 문 앞에 추가했습니다(이로 인해 출력 줄의 필드 구분 기호가 OFS로 변경되는 부작용이 있습니다). 그렇지 않으면 변경된 내용이 행에는 OFS가 기본값(단일 공백)으로 지정되지만 변경되지 않은 행은 원본 파일의 내용과 동일하게 유지되므로 cat터미널에서 사용하거나 볼 때 열이 올바르게 정렬되지 않을 수 있습니다. 어느.

관련 정보