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를 추가하면 0
awk $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