使用awk计算具有多个列的文件的中值

使用awk计算具有多个列的文件的中值,awk,Awk,我试图计算文件中许多列的中位数(而不是平均值)。我写了这篇文章(改编自只适用于1列的代码) sort-n考虑使用 $cat输入 复合cg00000029 CG0000108 CG0000109 cg00000165 TCGA-G4-6298-11A 0.309164840970903 0.108696904309357 TCGA-G4-6311-11A 0.28421493698384 0.1925581854861 TCGA-AA-3506-11A 0.293174399370542 0.12

我试图计算文件中许多列的中位数(而不是平均值)。我写了这篇文章(改编自只适用于1列的代码)

sort-n考虑使用

$cat输入
复合cg00000029 CG0000108 CG0000109 cg00000165
TCGA-G4-6298-11A 0.309164840970903 0.108696904309357
TCGA-G4-6311-11A 0.28421493698384 0.1925581854861
TCGA-AA-3506-11A 0.293174399370542 0.12546425658397
TCGA-AA-3713-11A 0.225964660289 0.150662194530275
$datamash—标题输入-W中间值2<输入
0.28869466818446
$datamash—标题输入-W中间值3<输入
0.13806322555712

请参阅
datamash--help
,了解上面使用的选项。

sort-ninfile | awk'{了解更多信息(i=1;我请说明输入数据和预期输出数据的外观。是否有标题,数据是否用逗号、空格或制表符分隔?所有行是否有相同数量的字段?是否有一些字段为空?数字是否为整数?实数?复数?科学记法?填充在第一行和第一行中有标题列。它由制表符分隔,但我可以使用sed轻松更改。列的字段数不同,有变量(从0到全部)空白字段的数量,数字是实数。看起来是这样的。请不要将代码或数据放在评论区-它是未格式化且难以阅读的。相反,请单击问题下方的
编辑
,并将其粘贴到其中进行更新。谢谢。要将部分问题格式化为代码/数据,请先用鼠标选择它,然后单击粗体和斜体旁边的格式化工具栏中的
{}
。我使用的正是上面的示例,我得到了datamash:第2行字段2中的无效数值:“0.309164840970903”好的,这是我的问题。我必须设置要使用的datamash。相反,!!!完全正确。这取决于您的区域设置。希望这解决了您的问题。
sort -n <infile | awk '{for (i = 1; i <= NF; ++i); count[NR] = $i;}END {for (i = 1; i <= NF; ++i); if (NR % 2) {print count[(NR + 1) / 2];} else {print (count[(NR / 2)] + count[(NR / 2) + 1]) / 2;}}'
$ cat input
Composite cg00000029 cg00000108 cg00000109 cg00000165
TCGA-G4-6298-11A 0.309164840970903 0.108696904309357
TCGA-G4-6311-11A 0.284214936998384 0.192558185484861
TCGA-AA-3506-11A 0.293174399370542 0.12546425658397
TCGA-AA-3713-11A 0.225964654660289 0.150662194530275

$ datamash --header-in -W median 2 < input
0.28869466818446

$ datamash --header-in -W median 3 < input
0.13806322555712