필드 값이 3보다 작거나 같은 행을 삭제합니다 - sed 또는 awk?

필드 값이 3보다 작거나 같은 행을 삭제합니다 - sed 또는 awk?

8번째 필드(열)의 값이 2 이하인 모든 행을 삭제해야 합니다.

내 데이터는 다음과 같습니다.

12-31   Airport 189 379 41  49.70946503 -124.91377258   2   2880    30.8
01-01   AlberniElementary   165 331 16  49.26100922 -124.80662537   4   5760    26.1
01-09   BamfieldMarine  161 323 23  48.83490372 -125.13572693   2   2875    27.4
01-10   BamfieldMarine  161 323 23  48.83490372 -125.13572693   3   3068    38.6

awk를 사용하면 필요한 값을 제거하여 다른 파일에 인쇄할 수 있다는 것을 알고 있으며 sed가 현재 파일을 편집한다는 것도 알고 있습니다. 두 경우 모두 원본 파일을 보관해야 합니다.

노트: 솔루션에 대한 자세한 설명을 제공해 주세요. 단지 명령을 작성하는 것만으로는 충분하지 않습니다. 제안사항은 댓글로 남겨주세요.

추가 설명:데이터에 헤더 행이 있으므로 가장 가능성 있는 솔루션에는 다음이 필요합니다.

awk 'FNR>1'

제 생각에는?

답변1

당신은 거의 그것을 이해합니다.

 awk '(NR>1) && ($8 > 2 ) ' foo > bar

어디

  • NR레코드 수(즉, 행 수)입니다.
  • $88개 필드입니다
  • &&논리적이고
  • foo변경되지 않은 원본 파일입니다.
  • bar결과 파일
  • 암시적 기본 동작은 현재 입력 줄을 인쇄하는 것입니다.

헤더는 보존하기 위해 foo에서 bar로 스트라이프됩니다.

 awk '(NR==1) || ($8 > 2 ) ' foo > bar

어디

  • ||논리적이거나
  • NR==1 또는 $8 > 2이면 입력 줄을 인쇄합니다.

업데이트 #1

범위 지정

  • ( ($8 >= -4) && ( $8 <= 4 ) )8번째 필드는 -4부터 4까지입니다.
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) )제목 포함 동일

관련 정보