파일 라인 반복, 파일 분할 및 각 파티션 분류

파일 라인 반복, 파일 분할 및 각 파티션 분류

아래에는 다음과 같은 방법으로 파일의 세그먼트 내에서 데이터를 수집하기 위해 파일 행을 반복하는 코드를 배치했습니다.

프로세스 다이어그램 이해:

segL                     segH
|                         |
[  2 4 9 15 25 45 ... 99  ] 102 136 ... 206

나중에 10000줄이 포함된 파일의 경우 파일을 동일한 길이의 세그먼트로 분할하고 하한은 과 segL입니다 segH=segL+segsize.
파일을 살펴보면서 다음을 만족하는 정수의 수를 세고 싶습니다
segL < integer =< segH. 그런 다음 이 숫자는 해당 세그먼트의 정수 수를 고유하게 포함하는 변수에 저장되어야 합니다!

암호

segsize=100
segL=0
segH=100
blockcounter=0
segment1=0
segments2=0
#Go through input and partition it
for i in {1..2}
do
    while read p; do
        if [ $p -gt $segL ] && [ $p -le $segH ]
        then
            blockcounter=$(($blockcounter + 1))
        fi
    done <$inputfile

    if [ "$i" -eq "1" ]
    then
        segment1=$blockcounter
        echo "segment1: $segment1"
    fi
    if [ "$i" -eq "2" ]
    then
        segment2=$blockcounter
        echo "segment2: $segment2"
    fi
blockcounter=0
segL=$segH
segH=$(($segL + $segsize))
done

이제 내 코드에서는 2개의 세그먼트에 대한 데이터만 수집할 수 있습니다. 현재 내 파일에는 200개가 넘는 정수(2*세그먼트)가 포함되어 있습니다.

산출:

1절: 27
2절: 33

더 큰 샘플의 경우 위와 유사한 출력을 사용하여 데이터를 최대 100-120개의 세그먼트에 저장해야 합니다.

동일한 출력을 달성하기 위한 대안(예: 데이터 포인트를 저장하기 위한 2D 배열과 유사한 객체)을 생각할 수 있습니까 A(segment1|<count of integers>)?

답변1

질문을 제가 제대로 이해했는지 잘 모르겠습니다...

#!/bin/bash

segsize=100
segL=0
max=0
a=()

while read p; do
        (( n = (p - segL - 1) / segsize ))
        if (( n + 1 > max )); then
                for ((i = max; i < n + 1; i++)) do
                        a+=(0)
                done
                (( max = n + 1 ))
        fi
        (( a[n]++ ))
done

for ((i = 0; i < max; i++)); do
        echo "segment $((i+1)) ($((segsize*i)), $((segsize*(i+1)))] : ${a[$i]}"
done

입력(각 숫자는 0보다 커야 함):

1
100
101
200
1000
1001 

산출:

segment 1 (0, 100] : 2
segment 2 (100, 200] : 2
segment 3 (200, 300] : 0
segment 4 (300, 400] : 0
segment 5 (400, 500] : 0
segment 6 (500, 600] : 0
segment 7 (600, 700] : 0
segment 8 (700, 800] : 0
segment 9 (800, 900] : 0
segment 10 (900, 1000] : 1
segment 11 (1000, 1100] : 1

관련 정보