필드 값이 3-sed 또는 awk 이하인 줄을 제거 하시겠습니까? 값이 2 이하인 모든

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’

나는 생각합니까?



답변

당신은 거의 그것을 얻었다.

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

어디

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

헤더는 foo에서 bar로 스트라이프되어 유지됩니다.

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

어디

  • || 논리적이거나
  • NR == 1 또는 $ 8> 2 인 경우 입력 라인이 인쇄됩니다.

업데이트 # 1

범위를 지정하려면

  • ( ($8 >= -4) && ( $8 <= 4 ) ) -4에서 4까지 8 번째 필드
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) ) 헤더를 포함하여 동일

답변