使用GNU parallel计算多文件的整体中位数
解决整体中位数计算问题
你之前的命令是先单独计算每个文件第三列的中位数,再对这些中位数取中位数,这确实不是所有数据的整体中位数——要得到正确结果,得把所有文件的第三列数据全部汇总后再计算中位数。
直接用这个命令就行:
find 01/ -type f -name '*.csv.gz' | parallel "pigz -dc {} | cut -d, -f3" | datamash median 1
命令拆解:
pigz -dc {}:解压指定的.gz文件,输出到标准输出cut -d, -f3:以逗号为分隔符,提取每行的第三列数据- 所有文件的第三列数据会被集中到一起,最后由
datamash median 1计算这一整列数据的整体中位数
额外说明(如果文件有表头):
如果每个CSV文件的第一行是表头,得先跳过表头避免干扰计算,命令调整为:
find 01/ -type f -name '*.csv.gz' | parallel "pigz -dc {} | tail -n +2 | cut -d, -f3" | datamash median 1
这里tail -n +2的作用是跳过每个文件的第一行(表头行)。
内容的提问来源于stack exchange,提问作者kiasari
相关产品推荐
相关产品推荐

