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