문자열에서 문자를 제거할 때 bash 오류를 수정하는 방법은 무엇입니까?

문자열에서 문자를 제거할 때 bash 오류를 수정하는 방법은 무엇입니까?

이것은 숙제가 아닙니다. 저는 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은 합계를 보고합니다.

관련 정보