많은 파일에서 변수 문자열 제거

많은 파일에서 변수 문자열 제거

다음과 같은 문자열을 포함하는 파일이 많이 있습니다.

>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/과 일치하는 패턴 공간(일반적으로 현재 줄, 레코드라고도 함)의 모든 부분이 명령 의 .LHSs///RHSs///
  • 따라서 교체를 수행하는 명령은 다음과 같습니다.
  • sed -e 's/^>[0-9][0-9][0-9][0-9][0-9]_Pseudomonas_etcetera/>Pseudomonas_etcetera/' inp1.sorted
  • 면책 조항: 테스트되지 않았습니다.

관련 정보