将切割操作的输出输送到bc

时间:2016-04-01 16:51:55

标签: bash cut bc

是否可以根据bc命令的输出来计算cut

假设我有以下基于列的文件:

PAK_01896       PAU_03392       75.8    149     32      1       1       145     1       149     *       *
PAK_02014       PAU_03392       69.8    149     45      0       1       149     1       149     *       *
PAU_02074       PAU_03392       77.2    149     30      1       1       145     1       149     *       *
PAU_02206       PAU_03392       69.1    149     46      0       1       149     1       149     *       *
PAU_02775       PAU_03392       79.2    149     31      0       1       149     1       149     *       *
PAK_02606       PAU_03392       78.5    149     32      0       1       149     1       149     *       *
PAU_01961       PAU_03392       67.1    149     49      0       1       149     1       149     *       *
PAK_03203       PAU_03392       95.3    149     7       0       1       149     1       149     *       *
PLT_01716       PAU_03392       76.5    149     35      0       1       149     1       149     *       *
PLT_01758       PAU_03392       79.2    149     31      0       1       149     1       149     *       *
PAU_03392       PAU_03392       100.0   149     0       0       1       149     1       149     *       *
PLT_01696       PAU_03392       78.5    149     32      0       1       149     1       149     *       *
PLT_02424       PAU_03392       78.5    149     32      0       1       149     1       149     *       *
PLT_01736       PAU_03392       77.2    149     34      0       1       149     1       149     *       *
PLT_02568       PAU_03392       67.1    149     49      0       1       149     1       149     *       *
PAK_01787       PAU_03392       66.4    149     50      0       1       149     1       149     *       *

我希望能够对某些字段执行某些计算,例如对第3列求和和/或求平均值的影响。在我的脑海中,我首先想到的是尝试这个:

 cut -f3 column_based_file.txt | bc

但也许不出所料,这只会返回第3列中每个项目的价值。

我知道在我可以使用的this one这样的线程中有一些可行的解决方案,但是由于cut是我在bash中操作基于列的数据一段时间的首选方式,我'我只是想知道它是否可能?也许bc有一些标记可以一次读取一行并存储它们等。

编辑在建议的主题和提供的答案中有一些很棒的解决方案。出于好奇,既然我最初的想法是这样做的,那么有没有人有基于cutbc的解决方案(如果出于某种原因perl或awk不是&#39 ;或许可以吗?)

1 个答案:

答案 0 :(得分:3)

我会用awk。我认为这更适合这项任务。假设您的数据存储在sumavg.csv中,然后此GNU awk脚本(sumavg.awk)显示第三个字段的总和和平均值:

    {s += $3 }
END {print "Sum:", s, " Avg: ", s / FNR}

使用命令awk -f sumavg.awk sumavg.csv运行它。

$3是每一行的第三个字段,END是一个特殊模式,最后执行其操作,FNR给出文件中的行数。

相关问题