편집하다

편집하다

나는 다음과 같은 결과를 얻었습니다.

  Count Process
    238 0
     1 1124027
     1 1124065
     1 1124066
     1 1124069
     1 1124072
     1 1124073
     1 1547365
     1 1547366

첫 번째 행(238)을 제외한 모든 개수를 추가하고 싶습니다. awk에서 어떻게 할 수 있나요?

지금까지 나는 이것을 가지고 있지만
awk 'NF == 1 {for (i=2;i<=FNR;++i) sum += i print $i}'
그것은 버그입니다.

편집하다

이 명령의 출력을 구문 분석하려고 합니다.

cat /proc/8920/maps | awk '{print$5}' | sort | uniq -c |`awk 'NF == 1 {for (i=2;i<=FNR;++i) sum += i print $i}'` 

uniq -c 이전에는 모든 것이 잘 작동하지만 awk 스크립트를 사용하여 첫 번째 행 238을 제외한 첫 번째 열의 모든 행을 추가하는 데 문제가 있습니다. 문제가 해결되기를 바랍니다.

Hauke ​​Laging의 답변과 제가 이 스크립트를 생각해냈습니다

cat /proc/8920/maps | awk '{print$5}' | sort | uniq -c | awk 'NR>1 { sum+= $1} END  {print sum}'

이제 작동합니다.

답변1

값이 1인 경우에만 값을 추가하는 것은 의미가 없습니다. 이 경우 대신 일치하는 행 수를 계산할 수 있습니다.

grep -c " 1 " < inputfile

실제 추가는 다음과 같이 수행됩니다.

awk 'NR>1 { sum+=$1 }; END { print sum }' inputfile

관련 정보