新答案:

新答案:

我正在尝试进行这样的计算,我有一个文本文件,其中包含类似的数字

459
455
463

我必须计算这些数字相对于 600 的百分比。我的意思是准确的

(459/600)*100这将是我459从文本文件中获得的百分比。

有人可以帮我吗?

答案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”仅包含 1 列,其中数字在 0 到 600 之间,它只打印该数字,并在下一列中打印它相对于 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%

-dswitch 采用多个分隔符:此处为空格和百分比

答案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%

相关内容