python - 在列内添加逗号分隔值
问题描述
嗨,我有一个像这样的文件格式(TSV)
Name type Age Weight Height
Xxx M 12,34,23 50,30,60,70 4,5,6,5.5
Yxx F 21,14,32 40,50,20,40 3,4,5,5.5
我想添加年龄,体重和身高中的所有值并在此之后添加一列,然后还有一些百分比,例如 Total_Height/Total_Weight (awk '$0=$0"\t"(NR==1?"Percentage" :$8/$7)')。我有大量数据集,无法使用 excel。
像这样
Name type Age Weight Height Total_Age Total_Weight Total_Height Percentage
Xxx M 12,34,23 50,30,60,70 4,5,6,5.5 69 210 20.5 0.097
Yxx F 21,14,32 40,50,20,40 3,4,5,5.5 67 150 17.5 0.11
解决方案
使用您显示的示例,请尝试以下代码。
awk '
FNR==1{
print $0,"Total_Age Total_Weight Total_Height Percentage"
next
}
FNR>1{
totAge=totWeight=totHeight=0
split($3,tmp,",")
for(i in tmp){
totAge+=tmp[i]
}
split($4,tmp,",")
for(i in tmp){
totWeight+=tmp[i]
}
split($5,tmp,",")
for(i in tmp){
totHeight+=tmp[i]
}
$(NF+1)=totAge
$(NF+1)=totWeight
$(NF+1)=totHeight
$(NF+1)=$(NF-1)==0?"N/A":$NF/$(NF-1)
}
1' Input_file | column -t
或awk
添加上述代码的简短版本
awk '
BEGIN{OFS="\t"}
FNR==1{
print $0,"Total_Age Total_Weight Total_Height Percentage"
next
}
FNR>1{
totAge=totWeight=totHeight=0
split($3,tmp,",")
for(i in tmp){
totAge+=tmp[i]
}
split($4,tmp,",")
for(i in tmp){
totWeight+=tmp[i]
}
split($5,tmp,",")
for(i in tmp){
totHeight+=tmp[i]
}
$(NF+1)=totAge OFS totWeight OFS totHeight
$0=$0
$(NF+1)=( $(NF-1)==0 ? "N/A" : $NF/$(NF-1) )
}
1' Input_file | column -t
解释:简单的解释是,将第 3、4 和 5 列的总和分配给行的最后一列。因此,根据 OP 的要求添加具有最后一列和倒数第二列的除值的列值。用于column -t
使其在输出时看起来更好。
推荐阅读
- maven - 当我尝试显示更少的日志消息时,Maven 失败 - 我需要在日志设置中更改更多行吗?我怎么能看到任何东西?
- python - 在一个循环中从 QListWidget 中删除所有项目
- python - 如何知道 Matplotlib 用于散点图的数据点数
- apache-spark - AWS EMR cloudformation spark-env 遇到不受支持的属性
- azure - Azure Devops Cli Docker 注册表服务连接失败
- javascript - 如何覆盖/替换 jsdoc 属性?
- java - 如何从系统环境中定义的外部属性文件配置 Spring Boot 数据源?
- android - RecyclerView 不显示数据
- c# - WPF MVVM 控制台输出到视图中的文本框
- python - 在 Python 中创建类对象的问题