새로운 답변:

새로운 답변:

이런 계산을 하려고 하는데 다음과 같은 숫자가 포함된 텍스트 파일이 있습니다.

459
455
463

600에 대한 이 숫자의 백분율을 계산해야 합니다. 내 말은 정확히

(459/600)*100459이것은 텍스트 파일에서 얻은 백분율 입니다 .

누구든지 나를 도와줄 수 있나요?

답변1

파일이 실제로 한 줄에 하나씩 숫자 목록인 경우 다음을 수행하십시오.

awk '{print $1,$1"%"}' numbers.txt 

또는 sed:

sed -r 's/(.+)/\1 \1%/' numbers.txt

답변2

좋아요, 이제 질문이 거의 완전히 바뀌었습니다 ^^ 이제 주어진 숫자를 계산해야 합니다. 숫자 600에 비해 몇 %를 나타내는지 계산해야 합니다.

이것은 개정된 버전입니다.

역사적인 이유로 아래에 이전 답변을 제공했습니다 ^^

새로운 답변:

awk ' { printf "%s %.2f%\n",$1,($1/600)*100; }'  numbers.txt

즉, "numbers.txt" 파일에 0에서 600 사이의 숫자가 포함된 열이 1개만 포함되어 있다고 가정하면 다음 열에는 해당 숫자와 600에 대한 %만 인쇄됩니다. 두 번째 계산은 간단히 ($1/6)"%"로 표현할 수 있지만 제 생각에는 스크립트에서 중요한 정보가 제거될 것 같습니다.

이제 새 예제 데이터에서 다음이 출력됩니다.

459 76.50%
455 75.83%
463 77.17%

이전 답변:

정말로 필요하다면백분율 계산, 그러면 다음과 같을 것입니다:

awk '
     { # each line is read and stored, and the sum is computed also.
       original[NR]=$0 ; #store the current line (line NR) in the "original[]" tab
       sum+=$1       ; #and compute the sum of the 1st column
     }
END  { #at the END, ie after we processed the whole file
       for(line=1;line<=NR;line++)
       {   printf "%s %.2f%\n",original[line],original[line]/sum*100 ;
       }
     } '  numbers.txt

이와 같은 것은 %를 계산하여 숫자 옆에 표시해야 합니다(소수점 2자리).

주어진 예에서는 다음을 출력합니다.

12 5.36%
23 10.27%
35 15.62%
67 29.91%
87 38.84%

답변3

$ paste -d' %' numbers.txt numbers.txt /dev/null
12 12%
23 23%
35 35%
67 67%
87 87%

-d스위치에는 여러 구분 기호가 사용됩니다(여기서는 공백과 백분율).

답변4

이 작업은 쉽게 수행할 수 있습니다 sed.

숫자를 순서대로 나열하면 다음과 같습니다.

12 23 35 67 87

$ sed 's/\([0-9]\+\)/\1 \1%/g' somefile.txt
12 12% 23 23% 35 35% 67 67% 87 87%

세부 사항

  1. sed우리는 검색 및 바꾸기 기능( )을 활용하고 있습니다 s/../../g.
  2. \([0-9]\+\)일련의 숫자(12, 23, ..)와 일치합니다. 주변 괄호는 이러한 결과를 임시 변수( \1)에 저장합니다.
  3. 일치하는 일련의 숫자를 찾을 때마다 이를 자체와 다른 사본 및 백분율 기호( \1 \1%) 로 바꿉니다.

노트:귀하의 버전이 스위치를 sed지원 하는 경우 -r위의 내용을 약간 요약할 수 있습니다.

$ sed -r 's/([0-9]+)/\1 \1%/g' somefile.txt
12 12% 23 23% 35 35% 67 67% 87 87%

그들이 준비한 경우:

12
23
35
67
87

$ sed -r 's/([0-9]+)/\1 \1%/g' somefile.txt
12 12%
23 23%
35 35%
67 67%
87 87%

관련 정보