평가 임계값이 1e-3인 SwissProt 데이터베이스에 대해 BlastX를 실행했습니다.
출력은 다음과 같습니다.
>TCONS_00006082 sp|P43298|TMK1_ARATH 57.89 57 23 2 459 292 751 806 8e-11 67.4
>TCONS_00006082 sp|P0DH62|Y4407_SELML 69.05 42 12 1 435 313 373 414 1e-08 60.1
>TCONS_00006082 sp|Q8RWZ5|SD25_ARATH 56.52 46 19 1 435 301 659 704 1e-08 60.1
>TCONS_00006082 sp|Q8VYA3|WAKLJ_ARATH 41.43 70 40 1 477 271 586 655 5e-08 58.2
>TCONS_00006082 sp|Q9C9L5|WAKLH_ARATH 40.00 70 41 1 477 271 600 669 5e-08 58.2
>TCONS_00006082 sp|P93749|Y2197_ARATH 40.54 74 43 2 501 283 225 297 6e-08 57.8
>TCONS_00006082 sp|Q9M342|WAKLP_ARATH 34.52 84 54 2 519 271 504 580 6e-08 57.8
이제 e 값(필드 11) > 0.001로 이러한 ID를 필터링하고 싶습니다. 어떻게 해야 하나요?
답변1
간단히 사용할 수 있습니다 awk
. 11번째 필드가 원하는 값인 것 같습니다.
awk '$11>0.001{print $0}' file
awk
진술이 정확하면 과학적 표기법이 이해되고 전체 행이 인쇄됩니다.
알아채다: 질문 출력에서 >0.001 기준을 충족하는 행이 없으므로 행이 인쇄되지 않습니다. 대신 다음과 같이 테스트할 수 있습니다.
awk '$11>0.00000001{print $0}' file
4줄이 인쇄되어야 합니다.
답변2
Perl 솔루션을 원한다면,
perl -lane 'print $_ if ($F[10] >0.001)' file
-a
각 입력 행을 자동으로 분할하고 열을 배열에 저장하면 @F
첫 $F[0]
번째 열이 생깁니다.