是否可以根据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
有一些标记可以一次读取一行并存储它们等。
编辑在建议的主题和提供的答案中有一些很棒的解决方案。出于好奇,既然我最初的想法是这样做的,那么有没有人有基于cut
和bc
的解决方案(如果出于某种原因perl或awk不是&#39 ;或许可以吗?)
答案 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
给出文件中的行数。