이것은 숙제가 아닙니다. 저는 bash를 처음 접했고 로깅에서 일부 데이터를 수집하려고 합니다.
파일에서 줄을 읽고 있습니다. 모든 줄은 다음과 같습니다.
[info] 1 - 12-04 15:33:37.542 : Finished createWalletRandom, total time 9898ms
밀리초를 분석해야 합니다(최소, 최대, 평균을 얻습니다). 나는 그것을 얻을 수 있지만 , 수학이 작동하려면 9898ms
그것을 제거해야 합니다 .ms
아래 줄을 시도해 보세요. 아무 것도 변경되지 않습니다.
MILLI_SECONDS=${RAW_MILLI_SECONDS%??}
다음을 시도하면 오류가 발생합니다 get_wallet_times.sh: line 23: -2: substring expression < 0
.
MILLI_SECONDS=${RAW_MILLI_SECONDS::-2}
이것은 내 코드입니다.
while read ONE_LINE;
do
echo $ONE_LINE
RAW_MILLI_SECONDS="$(cut -d' ' -f13 <<<"$ONE_LINE")"
echo $RAW_MILLI_SECONDS
MILLI_SECONDS=${RAW_MILLI_SECONDS::-2}
MILLI_SECONDS=${RAW_MILLI_SECONDS%??}
echo ${MILLI_SECONDS}
LINE_COUNT=$((LINE_COUNT+1))
FILE_SUM=$((FILE_SUM+MILLI_SECONDS))
done < logfile.txt
Mac 관련 bash 문제인 경우를 대비하여 macOS에 있습니다. 다른 필요한 사항이 있으면 알려주시기 바랍니다.
고마워요 매트
답변1
MacOS 구현에 차이가 있는지 잘 모르겠지만 bash
아래와 같이 RegExp 기반 문자열 수정을 시도해 볼 수 있습니다.
MILLI_SECONDS=${RAW_MILLI_SECONDS/ms/}
ms
패턴을 빈 문자열로 대체합니다.
답변2
이것을 사용하여 awk
전체 파일을 구문 분석 할 수 있습니다.
awk '
/ms$/ { ms += $NF }
END { printf "Total %ld ms from %d record(s)\n", ms, NR }
' <logfile.txt
첫 번째 줄은 ms
줄의 마지막 두 문자와 일치하고 해당 필드의 숫자 값을 합산합니다. 행 END
은 합계를 보고합니다.