Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 从计数文件中获取概率_Unix_Math_Awk_Terminal - Fatal编程技术网

Unix 从计数文件中获取概率

Unix 从计数文件中获取概率,unix,math,awk,terminal,Unix,Math,Awk,Terminal,我有一堆像这样的文件 54 apples 7 oranges 1 bananas 我想得到每一个的概率。也就是说,我想有以下几点: 0.87 apples 0.11 oranges 0.02 bananas 我可以很容易地为每个文件分别求一个总数 awk '{sum += $1} END {print sum}' input.txt 但我想知道如何计算概率 除非您想在文件中运行两次,否则需要将所有行存储在内存中 awk '{sum += $1; line[NR,1] = $

我有一堆像这样的文件

 54 apples
  7 oranges
  1 bananas
我想得到每一个的概率。也就是说,我想有以下几点:

 0.87 apples
 0.11 oranges
 0.02 bananas
我可以很容易地为每个文件分别求一个总数

awk '{sum += $1} END {print sum}' input.txt

但我想知道如何计算概率

除非您想在文件中运行两次,否则需要将所有行存储在内存中

awk '{sum += $1; line[NR,1] = $1; line[NR,2] = $2} END{for(i=0; i<NR; i++) print line[i,1]/sum, line[i,2]}' file

除非您想在文件中运行两次,否则需要将所有行存储在内存中

awk '{sum += $1; line[NR,1] = $1; line[NR,2] = $2} END{for(i=0; i<NR; i++) print line[i,1]/sum, line[i,2]}' file
这是规范的awk,不将文件存储在内存中:

awk'FNR==NR{sum+=$1;next;}{printf%.2f%s\n,$1/sum,$2}'input.txt{,}

HTH

这是规范的awk,不将文件存储在内存中:

awk'FNR==NR{sum+=$1;next;}{printf%.2f%s\n,$1/sum,$2}'input.txt{,}

HTH可能会更改顺序

awk '{n[$2]=$1} END {for (fruit in n) printf("%.2d %s\n", n[fruit]/NR, fruit)}' file 
awk -v lines="$(wc -l < file)" '{$1 = sprintf("%.2d", $1/lines}; print' file
还是为了维持秩序

awk '{n[$2]=$1} END {for (fruit in n) printf("%.2d %s\n", n[fruit]/NR, fruit)}' file 
awk -v lines="$(wc -l < file)" '{$1 = sprintf("%.2d", $1/lines}; print' file
我可以更改订单吗

awk '{n[$2]=$1} END {for (fruit in n) printf("%.2d %s\n", n[fruit]/NR, fruit)}' file 
awk -v lines="$(wc -l < file)" '{$1 = sprintf("%.2d", $1/lines}; print' file
还是为了维持秩序

awk '{n[$2]=$1} END {for (fruit in n) printf("%.2d %s\n", n[fruit]/NR, fruit)}' file 
awk -v lines="$(wc -l < file)" '{$1 = sprintf("%.2d", $1/lines}; print' file