네 번째 열의 조건이 일치하면 세 번째 열의 값을 인쇄해야 합니다.

네 번째 열의 조건이 일치하면 세 번째 열의 값을 인쇄해야 합니다.
cat Data.log 

REPLICAT RUNNING RPGUJ3   02:00:12 00:00:06
REPLICAT RUNNING RPGUJ4   00:00:10 00:00:06
REPLICAT RUNNING RPGUJ3_3 01:00:11 00:00:00
REPLICAT RUNNING RPGUJ4_3 00:00:12 00:00:06

4열에서 1시간보다 크거나 같은 값을 3열에 인쇄하고 싶습니다. 다음과 같이 출력하면 됩니다.

RPGUJ3
RPGUJ3_3

나는 단일 파일에서 열 3과 4의 출력을 얻으려고 아래에서 시도합니다.

cat Data.log | awk '{print $3 "     " $4}' >1.out

cat 1.out 

RPGUJ3      02:00:12
RPGUJ4      00:00:10
RPGUJ3_3    01:00:11
RPGUJ4_3    00:00:12

하지만 인쇄할 수 없어요

RPGUJ3
RPGUJ3_3

답변1

$4의 처음 두 자리 숫자가 다음과 같은지 확인하세요 00.

awk 'substr ($4, 1, 2) != "00" { print $3; }' Data.log > 1.out

awk자체 데이터 파일을 읽을 수 있습니다. cat파이프가 필요하지 않습니다.

$ cat Data.log
REPLICAT RUNNING RPGUJ3   02:00:12 00:00:06
REPLICAT RUNNING RPGUJ4   00:00:10 00:00:06
REPLICAT RUNNING RPGUJ3_3 01:00:11 00:00:00
REPLICAT RUNNING RPGUJ4_3 00:00:12 00:00:06
$ awk 'substr ($4, 1, 2) != "00" { print $3; }' Data.log > 1.out
$ cat 1.out
RPGUJ3
RPGUJ3_3
$ 

답변2

awk를 사용하십시오.

$ awk '$4+0{print $3}' Data.log
RPGUJ3
RPGUJ3_3

to를 추가하면 0awk $4에게 02:00:12문자열(예:)을 숫자로 변환하라고 지시합니다. 먼저 선행 숫자 뒤의 모든 항목을 제거하여 이 작업을 수행합니다. 이 경우 첫 번째 숫자로 시작하므로 :결과는 입니다 2. 그런 다음 해당 결과 번호를 조건으로 사용하면 결과가 이면 false가 되고 0, 그렇지 않으면 true가 됩니다 C. 이는 다른 언어와 마찬가지로 다음과 같습니다.

$ awk '{print $4, "->", $4+0, "->", ($4+0 ? "true" : "false")}' Data.log
02:00:12 -> 2 -> true
00:00:10 -> 0 -> false
01:00:11 -> 1 -> true
00:00:12 -> 0 -> false

관련 정보