
나는 거대한 텍스트 파일을 가지고 있으며 각 줄에는 값이나 텍스트 패턴이 포함되어 있습니다.
각 패턴 사이의 평균 또는 최소한 합계 값을 어떻게 찾을 수 있나요?
awk/sed 또는 perl 솔루션이 있나요?
예:
pattern1
200
300
pattern2
200
100
200
pattern3
pattern4
예상 출력:
pattern1
250
pattern2
166
pattern3
pattern4
답변1
Awk
방법:
awk '/pattern/{ if (cnt) { printf "%d\n", sum/cnt; sum=cnt=0 } print }
/^[0-9]+$/{ sum += $1; cnt++ }' file
산출:
pattern1
250
pattern2
166
pattern3
pattern4
답변2
Gnu 도구 sed n dc를 사용하면 다음과 같은 작업을 수행할 수 있습니다.
$ sed -re '
/^[0-9]+$/,/pattern/!b
/^[0-9]+$/{H;d;}
x;y/\n/ /
s#.*#dc -e "0dsn&[+ln1+snz1<+]s+l+xln/p"#ep
z;x
' file
결과:
pattern1
250
pattern2
166
pattern3
pattern4
후행 행은 숫자일 수 없다고 가정합니다. 또한 음수가 없다고 가정하십시오.
패턴화하려는 숫자만 포함된 행을 찾기 위해 sed에 범위를 설정했습니다. 그렇지 않으면 모든 것이 있는 그대로 인쇄됩니다. 숫자는 Hold nd에 추가되고 평균은 gnu sed의 s///e 명령을 사용하여 dc 유틸리티를 사용하여 계산됩니다.