내 Linux 시스템에 여러 줄로 구성된 파일이 있으며 구조는 다음과 같습니다.
에스 이름.비계시작 치수 방향 길이 순서
나는 그것을로 바꿔야 해.
에스 비계. 비계시작 치수 방향 길이 순서
예를 들어 다음과 같이 변경합니다.
s Sapo.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s Rana.RANA1 9000 10 + 13588361 ATAATAAAAT
s Sapo.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s Sapo.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s Coqu.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
도착하다:
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
감사해요!
답변1
sed 's/[[:alnum:]]*\.\([[:alnum:]_.]*\)/\1.\1/' file
그러면 영숫자 문자 집합으로 시작하고 그 뒤에 점이 오는 문자열을 찾습니다. 이 줄은 삭제됩니다. 그 뒤에는 영숫자, 점, 밑줄로 구성된 문자열이 와야 합니다. 이것은 모두 중간에 점이 있는 표현식의 두 번째 부분으로 두 번 대체됩니다.
문제의 데이터를 고려하면 다음과 같은 결과가 나옵니다.
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
이는 "이름"이 일치 [[:alnum:]]*
하고 "비계"가 일치한다고 가정합니다 [[:alnum:]_.]*
.
약간 "현학적"인 정규식은 다음과 같습니다.
sed 's/[[:alnum:]]\{1,\}\.\([[:alnum:]]\{1,\}\([._][[:digit:]]\{1,\}\)\{0,1\}\)/\1.\1/' file
점 양쪽의 하위 문자열은 비워둘 수 없으며 스캐폴드 접미사( _1
또는 .1
등)는 선택적으로 스캐폴드 이름과 별도로 일치됩니다.
확장된 정규식(아마도 읽기 쉬움)으로서 이는 다음과 같이 작성됩니다.
sed -E 's/[[:alnum:]]+\.([[:alnum:]]+([._][[:digit:]]+)?)/\1.\1/' file
이는 주어진 데이터에 대한 첫 번째 명령과 동일한 출력을 생성합니다.
답변2
awk '{
sub(/[^.]*\./,"",$2) #From the 2nd field, remove all up to first dot
$2=$2"."$2 #Replicate the resulting second field
print
}' file | column -t
산출:
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT
답변3
이 시도,
awk -F '\t' '{$2=gensub(/\w+\.(.*)/,"\\1.\\1","g",$2);}1' file | column -t
s scaffold_1.scaffold_1 19037 10 + 13588361 ATAATAAAAT
s RANA1.RANA1 9000 10 + 13588361 ATAATAAAAT
s scaffold_5.scaffold_5 19037 10 + 13588361 ATAATAAAAT
s scaffold_8.scaffold_8 19037 10 + 13588361 ATAATAAAAT
s SGBE0296.1.SGBE0296.1 68900 10 + 13588361 ATAATAAAAT