다음 파일이 있습니다.
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
터미널에서 사용하거나 볼 때 열이 올바르게 정렬되지 않을 수 있습니다. 어느.