Linux Bash 및 스크립트 - 텍스트 파일의 줄 수 계산

Linux Bash 및 스크립트 - 텍스트 파일의 줄 수 계산

현재 작업 중인 스크립트에서 표시되는 줄 수를 표시하는 데 문제가 있으며 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"과 유사한 다른 변수를 정의하고 이를 사용하여 계산할 수 있습니다.

관련 정보