python - 根据列的数字内容从制表符分隔的文件中删除列?

标签 python bash perl csv

我有一个制表符分隔的文件,如下所示: 第一列包含位置编号,1-end 其余的都有一些频率数字。

Position     A    B    C    D
1          117    0    1    0   
2            4    0    0   16   
3            0    5   11    0   
4            0    0    0    5   
5            0   15    0    0   
6          100    0  108    0   
7            0    0  147    0  

我想重新格式化此文件以使其具有两列,第一列是保持原样的位置列,第二个包含每个位置的最高频率。

理想输出:

Position    HighFreq
1                117
2                 16  
3                 11  
4                  5   
5                 15   
6                108  
7                147 

到目前为止,我拥有的是一个选择最大数字并打印的函数:

awk '{max=$1; for(i=2;i<=NF; i++) {if($i>max){max=$i;}};printf"%f\n",max}' file.tsv

我正在尝试为这个问题编写一个 bash 解决方案,但最受欢迎的是 Perl/Python!

最佳答案

$ perl -MList::Util=max -F/\t/ -lane 'print join "\t", $. == 1 ? qw(Position HighFreq) : ( $F [0], max(@F[1..$#F]) )'

说明

  • -MList::Util=max

    加载List::Util::max

  • -F/\t/-a

    激活自动分割并将分隔符设置为/\t/

  • -lne

    自动附加适当的行结尾,应用单行,逐行处理 ARGV 输入

  • 打印连接“\t”,...

    打印制表符分隔

  • $. == 1 ? ...:...

    处理列标题

  • max(@F[1..$#F])

    返回 @F 中除第一个元素之外的所有元素的最大值

关于python - 根据列的数字内容从制表符分隔的文件中删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49232844/

相关文章:

python - 在 Python 中组合多个正则表达式

node.js - NPM 找不到模块 bash

bash - 如果镜像有入口脚本,Docker 无法启动交互式 shell

linux - 在初始化脚本中启动时如何设置 session DBus 的环境变量?

perl - 与 Net::SSH::Perl 失去连接

perl - 使用 Perl 匹配模式的 SCP 文件

perl - 如何使用 Perl 修改 CSV 文件中的字段?

python - 为什么我使用pd.DataFrame后我的txt文件被改变了?

python - 如果该对象的类在另一个 boost 模块中声明,如何使用 boost 将指向 C++ 对象的指针返回给 python?

从 csv 读取数字时出现 python 错误