특정 열의 숫자 범위를 포함하는 행을 반환합니다. 단, 해당 열에 특정 숫자가 포함된 경우에만 해당됩니다.

특정 열의 숫자 범위를 포함하는 행을 반환합니다. 단, 해당 열에 특정 숫자가 포함된 경우에만 해당됩니다.

이 질문과 관련됨... 특정 열의 숫자 범위를 포함하는 행을 반환합니다. 특정 열의 숫자 범위를 포함하는 행 반환

특정 범위 내의 숫자가 포함된 행을 삭제하는 방법을 알고 있습니다. 그렇다면 다른 열에 숫자가 포함된 경우에만 행을 삭제하려면 어떻게 해야 할까요?

예를 들어 두 번째 열에 4가 포함되고 세 번째 열에 50에서 85 사이의 숫자가 포함된 경우 행을 삭제하시겠습니까? 입력하다

a 3 44 563
d 4 55 11 
e 2 93 445
r 4 82 44
e 4 93 33

산출

a 3 44 563
e 2 93 445
e 4 93 33

나는 우리가 이런 일을 할 수 있다고 생각했지만... 작동하지 않습니다.

awk '$2==4' & awk '$2 > 85 && $2 < 50' input > output

누구든지 이것을 알 수 있습니까? 두 번째 열에는 1에서 22 사이의 정수만 포함된다는 점은 주목할 가치가 있습니다.

미리 감사드립니다!

답변1

이 awk 조건은 다음 줄을 인쇄합니다.

awk '$2 != 4 || $3 > 85 || $3 < 50' input

두 번째 열이 4와 같지 않거나, 세 번째 열이 85보다 크거나, 세 번째 열이 50보다 작을 때 한 줄을 인쇄합니다.

이 논리적 동등물은 동일한 효과를 가져야 합니다.

awk '! ($2 == 4 && $3 <= 85 && $3 >= 50)' input

의견에서 지적했듯이 범위 비교를 작성하는 더 깔끔한 방법은 min <= num <= max다음과 같습니다 min <= num && num <= max.

awk '! ($2 == 4 && 50 <= $3 && $3 <= 85)' input
awk '$2 != 4 || $3 < 50 || 85 < $3' input

관련 정보