길고 짧지만, 선택한 줄의 끝을 복사하여 해당 줄에 텍스트를 추가하는 방법이 있습니까? 내가 이루고 싶은 것은 이것이다.
내가 소유한 것
>13_gnd
atcg
>14_galF
atgc
내가 원하는 건
>13_gnd_gnd
atcg
>14_galF_galF
atgc
따라서 마지막 단어로 시작하는 모든 줄을 복사하여 >
줄 끝에 추가하세요. 감사해요.
답변1
$ sed 's/_[^_]*$/&&/' file
>13_gnd_gnd
atcg
>14_galF_galF
atgc
교체는 sed
각 줄의 마지막 밑줄과 그 뒤의 모든 항목(줄 끝까지)과 일치합니다. 이것이 패턴이 _[^_]*$
수행하는 작업입니다("밑줄이 아닌 다른 문자가 뒤에 올 수 있는 밑줄 및 줄 끝과 일치"). 그럴 것이다바꾸다이것은(밑줄 포함) 무엇이든 두 번 일치합니다( &&
대체 비트에 있는 내용입니다).
파일인 것 같으니까fasta 형식, 게놈 서열에는 밑줄을 포함할 수 없으므로 >
줄 시작 부분에 특별한 테스트가 필요하지 않습니다.
답변2
짧은앗해결책:
awk -F'_' '$0~/^>/{ $0=$0 FS $NF }1' file
산출:
>13_gnd_gnd
atcg
>14_galF_galF
atgc
세부 사항:
-F'_'
- 필드 구분 기호$0~/^>/
- 줄이 다음으로 시작하는 경우>
$0=$0 FS $NF
- 마지막 필드 값을 끝에 추가합니다.