awk가 지수 숫자를 올바르게 인식하지 못합니다. 내 실수인가요? [폐쇄]

awk가 지수 숫자를 올바르게 인식하지 못합니다. 내 실수인가요? [폐쇄]

awk 버전: GNU Awk 4.1.1, API: 1.1(GNU MPFR 3.1.2-p3, GNU MP 6.0.0)

다음과 같은 입력이 있습니다(작은 예).

Lh8627_00055___transposase_3    c368296268f9d0100b8a65d2cd57aaf2    424 Pfam    PF01610 Transposase 297 404 1.8E-11 T   22-06-2017  IPR002560   Transposase IS204/IS1001/IS1096/IS1165, DDE domain      
Lh8627_05835___transposase_1    212014f87f94178312dac70f061d81c6    469 Pfam    PF06782 Uncharacterised protein family (UPF0236)    30  399 4.5E-37 T   22-06-2017  IPR009620   Uncharacterised protein family UPF0236      
Lh8627_03700___transposase_3    916962acc8271c66b217ab903d836768    401 Pfam    PF06782 Uncharacterised protein family (UPF0236)    201 334 4.4E-6  T   22-06-2017  IPR009620   Uncharacterised protein family UPF0236      
Lh8627_01850___transposase_1    05e46b0f13cf6aa7db8adcf5fd3fd39d    409 Pfam    PF01548 Transposase 8   160 3.0E-29 T   22-06-2017  IPR002525   Transposase, IS111A/IS1328/IS1533, N-terminal   GO:0003677|GO:0004803|GO:0006313    

9열의 값이 1.0E-10 미만인 행을 필터링하고 싶습니다.

내 주문은 입니다 awk '$9 < 1.0E-10' my file. 그러나 예를 들어 위의 작은 입력에서 세 번째 줄은 필터링되지 않습니다. 내가 뭘 잘못했나요?

답변1

내 문제는 awk가 탭뿐만 아니라 구분 기호로 공백도 사용한다는 것을 이해하지 못한다는 것입니다. 일단 추가되면 -F'\t'작동합니다. 양 비교가 꽤 괜찮네요.

답변2

당신의 명령은 매우 훌륭합니다. 그러나 귀하의 입력은 그렇지 않습니다. 귀하의 예에서 9번째 멤버가 항상 예상되는 숫자는 아닙니다.

$ awk '{print $9}' <your_file>
1.8E-11
(UPF0236)
(UPF0236)
3.0E-29

예를 들어 다음을 사용하여 불필요한 요소를 제거하여 입력을 다시 정렬할 수 있습니다 sed.

sed 's/protein family (UPF0236)//' <your_file> | awk '$9 < 1.0E-10'

관련 정보