각 열에서 패턴으로 끝나는 문자열을 제거합니다.

각 열에서 패턴으로 끝나는 문자열을 제거합니다.

파일에 무작위로 나타나는 (L=6), (L=7)...(L=12)의 모든 항목을 삭제하고 싶습니다. 형식은 다음과 같습니다.

내 입력 파일:

TRINITY_DN1910_c0_g1_i13    GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5) GO:0006030(L=9) GO:0006032(L=11)    GO:0006040(L=6)
TRINITY_DN1452_c0_g1_i11    GO:0005975(L=3) GO:0006022(L=9) GO:0006026(L=12)    GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)

                                        

파일은 탭으로 구분됩니다.

예상 출력

TRINITY_DN1910_c0_g1_i13    GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5)
TRINITY_DN1452_c0_g1_i11    GO:0005975(L=3) GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5) 

답변1

sed다음 방법을 사용하여 이 작업을 수행 할 수 있습니다 .

sed 's/GO:[^   ]*(L=[6-9])//g
     s/GO:[^ ]*(L=1[0-2])//g' filename

을 눌러 탭 문자를 입력할 수 있습니다 <ctrl-v><tab>. 이것이 내가 대괄호로 시작하는 것입니다 ^.

답변2

모든 Unix 시스템의 모든 쉘에서 awk를 사용하십시오.

$ awk '
    BEGIN {
        for (i=6; i<=12; i++) {
            re = re sep i
            sep = "|"
        }
        re = "\t[^\t]+[(]L=(" re ")[)]"
    }
    {
        gsub(re,"")
        print
    }
' file
TRINITY_DN1910_c0_g1_i13        GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5)
TRINITY_DN1452_c0_g1_i11        GO:0005975(L=3) GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)

처리해야 할 다른 연속 숫자 범위가 있는 경우 루프의 시작/끝 숫자를 변경하면 됩니다. 연속되지 않은 숫자가 있는 경우 에 re설정하기 만 BEGIN하면 됩니다. 그러나 숫자에 대해 의미가 있습니다. 예를 들어 한 가지 옵션은 루프를 로 바꾸는 것입니다 re = "7|12|957|1045".

답변3

awk '{gsub(/\s*\S*L=([6-9]|1[0-9])\)/, "")}1' file

답변4

사용행복하다(이전 Perl_6)

raku -ne '.=words; print .[0] ~ "\t"; \
      put $_.skip.grep( { / "(L=" (\d+) ")" $ / && $0 < 6 } ).join: "\t";'  

입력 예(탭으로 구분된 열):

TRINITY_DN1910_c0_g1_i13    GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5) GO:0006030(L=9) GO:0006032(L=11)    GO:0006040(L=6)
TRINITY_DN1452_c0_g1_i11    GO:0005975(L=3) GO:0006022(L=9) GO:0006026(L=12)    GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)

출력 예(탭으로 구분된 열):

TRINITY_DN1910_c0_g1_i13    GO:0005975(L=2) GO:0006022(L=4) GO:0006026(L=5)
TRINITY_DN1452_c0_g1_i11    GO:0005975(L=3) GO:0006030(L=2) GO:0006032(L=4) GO:0006040(L=5)
  • 즉, 자동 인쇄가 아닌 한 줄씩 플래그를 사용하여 줄을 읽습니다 -ne.

  • .=words.=운영자가 결과 요소를 다시 Raku의 $_테마 변수( .=wordsRaku의 약어 $_ = $_.words) 에 저장 하는 루틴을 사용하여 입력을 공백으로 구분된 열로 나눕니다 .

  • 두 번째 명령문에서는 첫 번째 열을 인쇄한 다음 \t탭 문자를 인쇄한 다음

  • 마지막으로 세 번째 문에서는 첫 번째 요소를 건너뛰고(이미 인쇄되었기 때문에) 먼저 일치 하고 6보다 작은 값을 캡처하는 grep요소를 반환하는 데 사용됩니다 ."(L=" (\d+) ")" $&& $0 < 6$0

https://raku.org

관련 정보