열 쌍이 문자열과 일치하지 않는 경우 행을 인쇄하는 방법

열 쌍이 문자열과 일치하지 않는 경우 행을 인쇄하는 방법

열 1을 보면 예상대로 작동합니다.

cat /tmp/inputfile | awk -F : '$12 !~ /100/ { print $6,$12,$13}'
cat /tmp/inputfile | awk -F : '$12 ~ /100/ { print $6,$12,$13}'
4726753 100 137

그런데 프로세스의 다음 단계(2열을 보고 인쇄하려고 하면 쌍이 "100 137"이 아니면 두 조건 모두에서 인쇄됩니다. 두 조건을 동시에 만족하므로(일치) 일치하지 않음)이므로 내 조건을 무시하는 것이겠죠?

cat /tmp/inputfile | awk -F : '$12,$13 ~ /100 137/ { print $6,$12,$13}'
4726753 100 137
cat /tmp/inputfile | awk -F : '$12,$13 !~ /100 137/ { print $6,$12,$13}'
4726753 100 137

문제 해결/이해는 1단계입니다. 최종 결과는 "100 137"과 "0 0"을 확인하고 $12나 $13 모두 이 쌍 중 하나가 아닌 경우에만 인쇄해야 합니다.

답변1

귀하의 질문을 올바르게 읽었다면 필드 12와 13이 (100, 137) 또는 (0, 0)이 아닌 경우에만 필드 6, 12 및 13을 인쇄합니다. 그래서:

awk -F: '! ( ( $12 == 0 && $13 == 0 ) || ( $12 == 100 && $13 == 137 ) ) { print $6, $12, $13 }' inputfile

관련 정보