このような計算をしようとしていますが、次の数字を含むテキストファイルがあります。
459
455
463
600 に対するこの数値の割合を計算する必要があります。私の言葉はまさに
(459/600)*100
459
これはテキストファイルから取得した割合です。
誰でも私を助けることができますか?
答え1
ファイルが実際に1行に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の%のみが印刷されます。 2番目の計算は単に($ 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%
詳細
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%