행의 한 열이라도 값이 1보다 작은 경우 행을 삭제하는 방법

행의 한 열이라도 값이 1보다 작은 경우 행을 삭제하는 방법

7000개의 행과 28개의 열이 있는 파일이 있습니다. 28개의 열 중 하나라도 값이 1보다 작은 경우 행을 삭제하는 방법은 무엇입니까?

awk열이 지정되면 행을 삭제하는 답변을 찾았습니다 .

하지만 1보다 작은 값을 갖는 열 번호에 관계없이 행을 삭제하고 싶습니다.

내 파일은 탭으로 구분된 형식입니다.
예제 파일

a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       0.9     6       7       4       10

답변1

Awk에서는 필드(열)를 반복하고 각각을 테스트합니다. 행에 숫자가 아닌 첫 번째 열이 있으므로 두 번째( i=2)부터 시작하세요.

그래서

awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' file

전. 주어진

$ cat example
a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       7.96681779026634e-05     6       7       4       10

그 다음에

$ awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' example
a       1       2       4       7       9
c       3       5       12      7       9

Perl에서는 첫 번째 열을 이동한 후 grep기본 분할 배열을 사용할 수 있습니다.@F

perl -ane 'shift @F; print unless grep { $_ < 1 } @F' file

관련 정보