현재 작업 중인 스크립트에서 표시되는 줄 수를 표시하는 데 문제가 있으며 Putty를 사용하고 있습니다. 스크립트는 다음과 유사한 텍스트 파일을 읽습니다.
user1|login|1
user2|login|1
user1|testing tests|10
user1|voiding tests|10
user2|logout|1
user1|logout|1
현재 내 awk는 다음과 같습니다
awk -F '|' '$1 == "user1" {sum += $3} END {print "user has run " NF "
processes for a total of " sum " minutes" }' textfile
현재 이것은 "user1이 총 22분 동안 3개의 프로세스를 실행했습니다"라는 메시지를 제공합니다.
내 계산이 정확하다면 행 수(4개)를 정확하게 계산하는 데 필요합니다.
답변1
NF는 "필드 수", 즉 열 수입니다. 이 예에서는 각 행에 3개의 열이 있으므로 일치 항목 수에 관계없이 출력은 항상 3입니다. proc
아래와 같이 각 일치 항목에 대해 추가 개수를 계산해야 합니다 .
$ awk -F '|' '$1 == "user1" {proc += 1; sum += $3} END {print "user has run " proc " processes for a total of " sum " minutes" }' textfile
user has run 4 processes for a total of 22 minutes
답변2
주어진 예에서는 다음을 시도해 보십시오.
한 명의 사용자에게만 해당:
awk -F'|' '$1=="user1"{i=$1;u[$1]++;m[$1]+=$3};END{print i,"processes:",u[i],"minutes:",m[i]}' file1
user1 processes: 4 minutes: 22
모든 사용자의 경우:
awk -F'|' '++u[$1]{m[$1]+=$3};END{for (i in u) print i,"processes:",u[i],"minutes:",m[i]}' file1
user1 processes: 4 minutes: 22
user2 processes: 2 minutes: 2
답변3
문제는 NF가 일치하는 행의 개수가 아니라 필드(열)의 개수라는 점입니다. 예를 들어 "sum"과 유사한 다른 변수를 정의하고 이를 사용하여 계산할 수 있습니다.