동일한 반복 패턴 사이의 행 수 계산

동일한 반복 패턴 사이의 행 수 계산

나는 이것을 참고했다.동일한 패턴 발생 사이의 Grep 라인, 파일로 분할하고 싶지 않고 대신 배열에 저장하고 싶습니다. 파일 count.txt에는 다음이 포함됩니다.

0 
1
2
3
0
1
2
0
1

내 스크립트 코드는 다음과 같습니다

total=$(sed -n \$= count.txt)
c=0
k=0
lineno=0
var="0"
for i in $(cat count.txt);
do
        if ["$i" -eq "$var"]
        then
                arr[$((k++))]=c
                c=0
                c=$((c+1))

        else
                c=$((c+1))
                if ["$lineno" -eq "$total"]
                then
                        arr[$((k++))]=c
                fi
        fi
        lineno=$((lineno+1))
done

위의 논리는 C++ 언어에서 테스트되었으며 배열을 인쇄할 때 다음과 같이 표시됩니다. 0 4 3 2 첫째, 내 스크립트는 다음 오류를 표시합니다 line 9: [0: command not found. 둘째, 위 출력과 같이 반복 횟수를 배열에 저장하는 효율적인 방법이 있습니까?

답변1

아, 한 줄:

awk -v patt="0" -v prev=1 '
    $0 ~ patt {print NR - prev; prev = NR} 
    END {print NR + 1 - prev}
' file

답변2

이 시도,

LINES=(`cat count.txt `)
arr=()
arrIndex=0
a=`echo $LINES`
for i in "${!LINES[@]}"; do
if [[ "${LINES[$i]}" = "$a" ]]; then
        arr[arrIndex]=`echo "${i}"`
        arrIndex=$((arrIndex+1))
fi
done
arr[arrIndex]=`echo ${#LINES[@]}`
arrOut=()
for ((i=1; i<"${#arr[@]}"; ++i))
do
        j=`expr $i - 1 `
        arrOut[$i]=`echo "${arr[$i]} ${arr[$j]}" | awk '{a=$1-$2;print a}'`
done

echo ${arrOut[@]}

관련 정보