n-1 번호를 얻는 방법

n-1 번호를 얻는 방법

버전을 보관하는 텍스트 파일이 있습니다.

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

이 경우 bcwhile 루프 내부에서 사용할 수 있습니다.

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

관련 정보