新しい答え:

新しい答え:

このような計算をしようとしていますが、次の数字を含むテキストファイルがあります。

459
455
463

600 に対するこの数値の割合を計算する必要があります。私の言葉はまさに

(459/600)*100459これはテキストファイルから取得した割合です。

誰でも私を助けることができますか?

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

詳細

  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%

関連情報