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

관련 정보