파일에 무작위로 나타나는 (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의$_
테마 변수(.=words
Raku의 약어$_ = $_.words
) 에 저장 하는 루틴을 사용하여 입력을 공백으로 구분된 열로 나눕니다 .두 번째 명령문에서는 첫 번째 열을 인쇄한 다음
\t
탭 문자를 인쇄한 다음마지막으로 세 번째 문에서는 첫 번째 요소를 건너뛰고(이미 인쇄되었기 때문에) 먼저 일치 하고 6보다 작은 값을 캡처하는
grep
요소를 반환하는 데 사용됩니다 ."(L=" (\d+) ")" $
&& $0 < 6
$0