다음과 같은 문자열을 포함하는 파일이 많이 있습니다.
>33100_Pseudomonas_etcetera1
texttexttext
>33632_Pseudomonas_etcetera2
texttexttext
>36406_Pseudomonas_etcetera3
texttexttext
다음과 같은 출력이 필요합니다.
>Pseudomomas_etcetera1
texttexttext
>Pseudomomas_etcetera2
texttexttext
>Pseudomomas_etcetera3
texttexttext
간단한 sed 솔루션이 있다고 확신하지만 알아낼 수 없는 것 같습니다.
참고: 문자는 항상 5자리 숫자이며 그 뒤에 밑줄, pseudomonas 등이 옵니다. 문자열은 항상 해당 줄의 시작 부분에 있으며 항상 ">"로 시작합니다. 모든 파일에는 ".sorted" 확장자가 있습니다.
답변1
sed
할 수 있다:
sed -E 's/>([0-9]+_)(\w+)/>\2/' files
패턴에 전혀 문제가 있는 경우:
sed -E 's/([0-9]+_)//' files
-E
확장 정규식 사용([0-9]+_)(\w+)
두 가지를 정의폰트당신이 그들을 방문하는 지역\1그리고\2.
답변2
Standard 를 사용 sed
하고 모든 파일이 현재 디렉터리에 있다고 가정합니다.
mkdir fixed || exit 1 # exits if the output directory already exists
for filename in *.sorted; do
sed '/^>[0-9]*_/s//>/' "$filename" >"fixed/$filename"
done
그러면 패턴과 일치하는 모든 파일 이름을 반복 *.sorted
하고 각 파일 이름에 대해 짧은 sed
스크립트를 실행합니다.
스크립트 sed
는 숫자와 밑줄로 시작하는 모든 Fasta 헤더를 찾습니다. 하나를 찾으면 제목 태그, 숫자 및 밑줄을 제목 태그로만 대체합니다 >
.
fixed
결과는 하위 디렉터리의 새 파일 에 기록됩니다 .
답변3
[OP가 썼다] 간단한 sed 솔루션이 있다는 것은 확실하지만 알아낼 수 없는 것 같습니다.
좋아요.
[OP가 썼다] 참고: 문자는 항상 5자리 숫자이며 그 뒤에 밑줄, Pseudomonas_etcetera가 옵니다. 문자열은 항상 해당 줄의 시작 부분에 있으며 항상 ">"로 시작합니다. 모든 파일에는 ".sorted" 확장자가 있습니다.
pbm 문에 대한 설명은 코드로 효율적으로 변환될 수 있으므로 매우 정확합니다 sed
. 그게 다야 :
- 문자열은 항상 줄의 시작 부분에 있으며 항상 ">"로 시작합니다: regex =>
/^>/
- 문자는 항상 5개의 숫자입니다: regex =>
/^>[0-9][0-9][0-9][0-9][0-9]/
- 그 뒤에 밑줄이 오고 그 뒤에 "Pseudomonas_etcetera"가 옵니다: regex =>
/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/
- 의 바꾸기 명령의 기본 구문은
sed
다음과 같습니다. 이는 정규식(명령 앞 )s/regex/rpl_str/
과 일치하는 패턴 공간(일반적으로 현재 줄, 레코드라고도 함)의 모든 부분이 명령 의 .LHS
s///
RHS
s///
- 따라서 교체를 수행하는 명령은 다음과 같습니다.
sed -e 's/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/>Pseudomonas_etcetera/' inp1.sorted
- 면책 조항: 테스트되지 않았습니다.