我正在尝试进行这样的计算,我有一个文本文件,其中包含类似的数字
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%
-d
switch 采用多个分隔符:此处为空格和百分比
答案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%
细节
- 我们正在利用 的
sed
搜索和替换能力 (s/../../g
)。 \([0-9]\+\)
匹配任何数字序列(12、23、..)。周围的括号将这些结果保存在临时变量 (\1
) 中。- 每次我们找到匹配的数字序列时,我们都会将其替换为自身和自身的另一个副本以及百分号 (
\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%