별도의 텍스트 파일에 있는 카운터

별도의 텍스트 파일에 있는 카운터

폴더 배치를 기반으로 파일을 처리하는 스크립트가 있고, 일련의 변수를 기반으로 폴더를 처리하고 처리하는 함수를 만들었습니다.

funtion filedetect {
//
<some processing code code>
//
}

folder=1
source="/dir_1/"
reciep="[email protected]"
filedetect    

folder=2
source="/dir_2"
reciep="[email protected]"
filedetect

이제 기본적으로 각 폴더에서 발견되고 처리된 파일 수를 계산하는 카운터가 있는 텍스트 파일 1개를 생성하는 코드 조각을 추가하고 싶습니다. 그래서 텍스트 파일에 다음과 같은 내용이 포함되도록 "folder" 변수를 추가했습니다.

FOLDER 1 = [count]
FOLDER 2 = [count]
etc.

하지만 이를 위해서는 이전 "count"를 한 줄씩 읽고 count=count+1로 바꿔야 합니다.

텍스트 파일을 기반으로 올바른 줄을 읽는 방법은 무엇입니까?

답변1

당신이 이런 일을 시작했다고 가정 해 봅시다.

folder1=10
folder2=4
folder3=7

다음과 같은 명령을 사용하여 작성할 수 있습니다.

set | grep -E '^folder[0-9]+=' > counter.txt

다시 읽으려면 파일을 가져오면 됩니다.

source counter.txt

bash배열( , )을 처리하는 셸이 있는 경우 zsh폴더 집합을 임의로 큰 수로 인덱싱할 수 있습니다.

folder[1]=10
folder[2]=4
folder[3]=7

이 변수 배열을 작성해 보세요.

set | grep '^folder=' > counter.txt

source위에서 설명한 대로 read it back 을 사용하세요 .

echo "${folder[1]}"배열의 경우 다음 과 같이 참조할 수 있습니다 foreach f "${folder[@]}"; do ... done. 인덱스 값이 엄격하게 1부터 오름차순인 경우 다음과 같이 할 수도 있습니다.

i=1
while [[ $i -le ${#folder[*]} ]]
do
    echo "$i => ${folder[$i]}"
    ((i++))
done

답변2

다음과 같은 YAML 형식의 파일이 있다고 가정합니다.

folder1: 10
folder2: 20
folder3: 30

당신이 yq사용할 수있는https://kislyuk.github.io/yq/n폴더와 관련된 개수를 1씩 늘리려면 다음 명령을 사용하십시오.

yq -i -y --arg n 3 '.["folder"+$n] += 1' counts.txt

또는 보다 설명적인 긴 옵션을 사용하세요.

yq --in-place --yaml-output --arg n 3 '.["folder"+$n] += 1' counts.txt

폴더와 관련된 현재 개수를 얻으려면 다음을 수행하십시오 n.

yq --arg n 3 '.["folder"+$n]' counts.txt

관련 정보