sed를 사용하여 파일의 일부만 유지하고 순서를 변경합니다(textWrangler grep 구문 기반).

sed를 사용하여 파일의 일부만 유지하고 순서를 변경합니다(textWrangler grep 구문 기반).

trial.fastq다음 형식의 파일을 편집하고 싶습니다 .

@NAME123.15.1 15 length=151
GTAGCNTACGGGAGGCAGCAGTGGGGAATTTTCC
+NAME123.15.1 15 length=151
AAABB#>>AABDGCEGGGFGGGHHHGGGFHHGHH
@NAME123.14.1 14 length=150
TTCGCNTACGGGAGGCAGCAGTAGGGAATCTTCC
+NAME123.14.1 14 length=150
ABBBB#>>ABBBGGGGGEGGGGHDGFFFHHGHHH

형식을 다음과 같이 변경하고 싶습니다.

@Inst:1:FID:LANE:TILE:15:Y 1:Y:0:NAME123
+GTAGCNTACGGGAGGCAGCAGTGGGGAATTTTCC
@Inst:1:FID:LANE:TILE:14:Y 1:Y:0:NAME123
+TTCGCNTACGGGAGGCAGCAGTAGGGAATCTTCC

sed다음을 포함한 여러 형식을 시도했습니다 .

sed -i -E 's/@(\w+).(\d+).(\d)\s\d+\slength=\d+\n.*/@Inst:1:FID:LANE:TILE:\2:Y \3:Y:0:\1\n/g' trial.fastq > trial_new.fastq

TextWrangler를 복사하여 grep 검색을 찾아서 찾았습니다. 또한:

sed -e 's/\(@\w\).\(\d..+\).\(\d\)\s\d..*\slength\=\d..*\n.*$(\w..*)\(.*\)$\+.*$.*$/@Inst\:1\:FID\:LANE\:TILE\:\2\:Y \3\:Y\:0\:\1\n\4/g' trial.fastq

나는 내가 잘못된 방향으로 가고 있다고 확신합니다. 누군가 내가 뭘 잘못하고 있는지, 이 문제를 해결하는 방법을 이해하도록 도와줄 수 있나요?

답변1

원하는 출력을 올바르게 이해하기를 바랍니다.

$ sed -nr '/#/d;s/@([^\.]+)[^ ]+ ([0-9]+) .*/@Inst:1:FID:LANE:TILE:\2:Y 1:Y:0:\1/p;s/^[A-Z]/\+&/p' file
@Inst:1:FID:LANE:TILE:15:Y 1:Y:0:NAME123
+GTAGCNTACGGGAGGCAGCAGTGGGGAATTTTCC
@Inst:1:FID:LANE:TILE:14:Y 1:Y:0:NAME123
+TTCGCNTACGGGAGGCAGCAGTAGGGAATCTTCC

설명하다

  • -n우리가 요청할 때까지 인쇄하지 마십시오
  • -rERE를 사용하세요
  • /#/d행 삭제#
  • ([^\.]+) save some characters that are not.` 나중에
  • [^ ]+ ([0-9]+) .*공백 사이에 숫자를 저장하세요
  • \1대체 저장된 스키마에 대한 역참조
  • ;셸에서와 마찬가지로 별도의 명령
  • s/^[A-Z]/\+&/대문자로 시작하는 줄을 접두어로 바꿉니다.+
  • p우리가 처리한 라인을 인쇄하세요

-i출력이 원하는 것인지 테스트한 후 파일을 제자리에서 편집하려면 이 플래그를 사용하십시오(명령 반복 사용 sed -nri ....).

관련 정보