수동으로 생성된 gff 파일이 있습니다. 각 행은 반복되며 각 짝수 행의 두 번째 열에서 문자열 "gene"을 문자열 "cds"로 바꿔야 합니다.
내 파일은 다음과 같습니다.
NC_002929.2 Seq gene 3653563 3653611 . + . Pred285
NC_002929.2 Seq gene 3653563 3653611 . + . Pred285
NC_002929.2 Seq gene 2902987 2903162 . - . rgtA
NC_002929.2 Seq gene 2902987 2903162 . - . rgtA
나는 그것이 다음과 같이 보이기를 원합니다 :
NC_002929.2 Seq gene 3653563 3653611 . + . Pred285
NC_002929.2 Seq cds 3653563 3653611 . + . Pred285
NC_002929.2 Seq gene 2902987 2903162 . - . rgtA
NC_002929.2 Seq cds 2902987 2903162 . - . rgtA
실제 파일은 이보다 훨씬 큽니다. 이는 단지 작은 예일 뿐입니다. 누구든지 나를 도와줄 수 있나요?
답변1
GNU sed가 있다고 가정n 스킵 m주소 연산자이며 문자열은 gene
두 번째 열 앞 어디에도 나타날 수 없습니다.
sed '2~2s/gene/cds/' file.gff
sed에는 "열"이라는 본질적인 개념이 없습니다. 2~2
여기서는 두 개의 열을 의미합니다.철사2일부터 시작철사gene
, 일치하는 줄에서 첫 번째 항목을 바꿉니다 .
마지막 "열"에 교체를 적용하려면 줄 끝에 고정된 공백이 아닌 문자를 일치시키는 것과 같은 작업을 수행해야 합니다.
sed -r '2~2{s/gene/cds/; s/[^[:blank:]]+$/ID=&/;}' file.gff
진정한 열 지향적인 것을 원한다면 awk, perl 또는 miller를 사용해 보십시오.
답변2
또한 다음 awk
접근 방식을 시도해 보세요.
awk -F"[ ]" '!(NR%2) {sub (/gene/, "cdc ", $3); $NF = "ID=" $NF} 1' file
NC_002929.2 Seq gene 3653563 3653611 . + . Pred285
NC_002929.2 Seq cdc 3653563 3653611 . + . ID=Pred285
NC_002929.2 Seq gene 2902987 2903162 . - . rgtA
NC_002929.2 Seq cdc 2902987 2903162 . - . ID=rgtA