완전히 숫자인 줄만 인쇄

완전히 숫자인 줄만 인쇄

텍스트 파일을 필터링하고 싶습니다.오직각 열이 유효한 부동 소수점 숫자인 행을 인쇄합니다. 예를 들어:

3 6 2 -4.2 21.2 
3 x 4.2 21.2 
3 2 2.2.2

첫 번째 줄만 유효한 부동 소수점 숫자 x로 전달됩니다 . 단순히 2.2.2각 섹션에서 청크를 .splits()실행하는 Python 스크립트를 작성할 수 있지만 try/except파일이 크면 속도가 느려집니다. 입력 파일에 알 수 없는 수의 가변 길이 열이 있으며 과학적 표기법을 사용하지 않습니다. awk해결책이 있나요 ?

답변1

awk '
    # skip any obvious stuff
    /[^0-9. -]/ {next}
    {
        # test each field for a number
        for (i=1; i<=NF; i++) 
            if ($i + 0 != $i)
                next
        print
    }
'

이렇게 하면 과학 표기법의 유효 숫자가 구분됩니다.1.2e1 == 12

답변2

언급한 조건에 따라 정규 표현식이 가능할 수도 있습니다. RHEL에서 실행할 다음 GNU awk 스크립트를 얻을 수 있습니다.

 awk '{for (i=1; i<=NF; ++i) {if ($i !~ /^[-]?[[:digit:]]+(\.[[:digit:]]+)?$/) break;if (i == NF)print($0)}}' file.txt

답변3

다음과 같이 시도해 보세요.

$ cat data.txt 
3 6 2 -4.2 21.2 
3 x 4.2 21.2 
3 2 2.2.2

$ awk '/^\s*(-?[0-9]+(\.[0-9]*)?\s+)+\s*$/ { print }' < data.txt 
3 6 2 -4.2 21.2 

관련 정보