Grep 정확한 숫자 일치

Grep 정확한 숫자 일치

긴 파일의 열 2에서 정확한 숫자를 추출하기 위해 grep을 사용하고 있습니다.

다음 코드를 사용하고 있습니다.

grep  -e "^71161 |^71072 |^72617 " mainfile > outputfile

이건 효과가 없어outputfile

도와주세요.

내 파일은 다음과 같습니다.

Date        ID  STN     SUPER   LAT     LONG    OBS     VAR
2014060106  71072   146 S000438 48.37   270.68  2   0   
2014060106  71108   12  71108   49.03   237.63  0   0.04
2014060212  71108   12  71108   49.03   237.63  0   0.16    
2014060212  71120   12  71120   54.4    249.73  0   0   
2014060212  71123   12  S000400 53.32   246.42  0   0.11    
2014060212  71125   12  S000961 54.13   251.48  0.05    0.00
2014060212  71140   12  S000388 49.92   260.05  2   0.21    
2014060212  71150   146 71150   50.45   259.4   1   2.21    

답변1

awk더 나은 옵션은 다음과 같습니다.

awk 'BEGIN{a[71161] a[71072] a[72617]}; $2 in a' < mainfile

또는:

awk '$2 ~ /^(72617|71072|71161)$/' < mainfile

또는:

awk '$2 == "71161" || $2 == "71072" || $2 == "72617"' < mainfile

(POSIX awk 구현을 사용하면(현재 Linux 배포판에서 일반적인 구현은 아니지만) ==문자열에 적용되는 연산자는 두 문자열이 동일한지 테스트합니다.같은 것을 정리하다, 이는 다음과 다를 수 있습니다.평등. 예를 들어, UTF-8 로케일의 GNU 시스템에서 POSIX awk는 "71161" == "٧١١٦١"이러한 GNU 로케일의 현재 버전에서 동부 아라비아 숫자가 서부 아라비아 숫자(영어)와 동일한 값을 갖기 때문에 true를 반환합니다 . 따라서 이를 방지하려면 ) LC_ALL로 설정하는 것이 좋습니다 C.

너도 할 수 있어숫자비교하다:

awk '$2 == 71161 || $2 == 71072 || $2 == 72617' < mainfile

또한 71161.0, 71.161e3 또는 0x115f9의 두 번째 필드가 있는 행을 반환합니다(GNU의 경우 awk16진수를 고려하려면 환경에서 POSIXLY_CORRECT를 전달해야 함).

관련 정보