버전을 보관하는 텍스트 파일이 있습니다.
1.0
2.0
3.0
4.0
5.0
등등.
4.0
예를 들어 입력으로 주고 3.0
출력으로 받는 방법이 필요합니다 . 수천 가지 버전이 있다는 점에 유의하세요.
버전 번호를 제공하고 이전 버전의 번호를 얻고 싶다는 뜻입니다. 그래서 내가 주면 9.0
나는 얻을 것이다 8.0
.
나는 노력했다
sed '1!G;h;$!d' test.txt
하지만 이것은 모든 숫자를 인쇄하는 것입니다.
답변1
다음을 사용하여 이 작업을 수행할 수 있습니다 bc
(참조:GNU BC 매뉴얼). bc
산술 표현식을 전달 하고 bc
이를 평가한 후 결과를 반환할 수 있습니다. 예:
echo '9.0 - 1' | bc -l
이 명령은 8.0
결과로 반환됩니다.
이제 버전 번호가 파일에 포함되어 있다고 가정합니다 version.txt
. 예:
echo '9.0' > version.txt
그런 다음 다음 명령을 실행할 수 있습니다.
echo "$(cat version.txt) - 1" | bc -l
8.0
이것은 출력으로 생성됩니다 . 또는 다음과 같은 파일에 버전 번호 목록이 있다고 가정합니다 versions.txt
.
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
다음과 같은 파일을 만들 수 있습니다.
for i in {1..10}; do echo "${i}.0" >> versions.txt; done
이 경우 bc
while 루프 내부에서 사용할 수 있습니다.
while read line; do echo "${line}-1" | bc -l; done < versions.txt
그러면 다음과 같은 출력이 생성됩니다.
0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
또는 버전 번호에서 정수 부분을 추출하여 bash
산술을 수행하는 데 사용할 수 있습니다. 이 작업을 수행하려면 다양한 텍스트 처리 도구(예 grep
: sed
, awk
, 등)를 사용할 수 있습니다. 다음은 명령을 사용하는 예입니다 cut
.
echo "$(( $(echo '9.0' | cut -d. -f1) - 1)).0"
이는 8.0
출력으로 생성됩니다. 이것을 while 루프에 넣으면 다음과 같은 결과가 나옵니다.
while read line; do \
echo "$(( $(echo ${line} | cut -d. -f1) - 1)).0";
done < versions.txt