我有一个以制表符分隔的文件,看起来像这样:
Sample3G td>
这里有一个可能的解决方案:
awk '
BEGIN{
OFS="t"; printf "%st", "SampleID"
}
NR==1{
for(i=5;i<=NF;i++){
printf "Sample%st", (i-4)
}
}
NR>1{
sample[$1]++
!sampleID[$1]++
for(i=5;i<=NF;i++){
if($3 == $i){
count[$1, i]++
}
}
}
END{
for (j in sampleID) {
print ""
printf "%st", j
for(i=5;i<=NF;i++){
printf "%st", count[j, i] / sample[j]
}
}
}' inputfile
SampleID Sample1 Sample2 Sample3
311 0.4 0.6 0
不是除以(NR-1),而是除以SampleID的行数。因此,如果文件中有其他sampleid:
cat test.txt
SampleID dbSNP Min.alle M.zygo Sample1 Sample2 Sample3
311 rs1490413 A Homo G A G
311 rs730123 G Homo A G A
311 rs7532151 A Homo A C C
311 rs1434369 G Homo T G T
311 rs1563172 T Homo T C C
312 rs1490413 A Homo G A G
312 rs730123 G Homo A G A
312 rs7532151 A Homo A C C
312 rs1434369 G Homo T G T
312 rs1563172 G Homo T C C
awk '
BEGIN{
OFS="t"; printf "%st", "SampleID"
}
NR==1{
for(i=5;i<=NF;i++){
printf "Sample%st", (i-4)
}
}
NR>1{
sample[$1]++
!sampleID[$1]++
for(i=5;i<=NF;i++){
if($3 == $i){
count[$1, i]++
}
}
}
END{
for (j in sampleID) {
print ""
printf "%st", j
for(i=5;i<=NF;i++){
printf "%st", count[j, i] / sample[j]
}
}
}' test.txt
SampleID Sample1 Sample2 Sample3
311 0.4 0.6 0
312 0.2 0.6 0
根据文件的大小,可能值得看看其他语言来完成这项任务,也就是说,这在R中是相对微不足道的:
library(dplyr)
df <- read.table(text = "SampleID dbSNP Min.alle M.zygo Sample1 Sample2 Sample3
311 rs1490413 A Homo G A G
311 rs730123 G Homo A G A
311 rs7532151 A Homo A C C
311 rs1434369 G Homo T G T
311 rs1563172 T Homo T C C", header = TRUE)
df %>%
group_by(SampleID) %>%
summarise(across(starts_with("Sample"), ~mean(.x == Min.alle)))
#> # A tibble: 1 × 4
#> SampleID Sample1 Sample2 Sample3
#> <int> <dbl> <dbl> <dbl>
#> 1 311 0.4 0.6 0
编辑
要打印列名(而不是"Sample_n"),可以使用:
awk '
BEGIN{
OFS="t"; printf "%st", "SampleID"
}
NR==1{
for(i=5;i<=NF;i++){
printf "%st", $i
}
}
NR>1{
sample[$1]++
!sampleID[$1]++
for(i=5;i<=NF;i++){
if($3 == $i){
count[$1, i]++
}
}
}
END{
for (j in sampleID) {
print ""
printf "%st", j
for(i=5;i<=NF;i++){
printf "%st", count[j, i] / sample[j]
}
}
}' inputfile
相关内容
- 通过javascript循环遍历表单字段数组,将表单字段文本替换为php值
- 循环遍历列表中的对象并将它们附加到其他对象
- powershell循环遍历文件并对其执行命令
- 循环遍历 AJAX 获取请求数据以查看使用 Razor 'checked'输入
- 循环遍历一个csv文件,并使用这些值作为参数在另一个csv文件中查找记录
- r语言 - 如何循环遍历多个列以生成多个交叉表
- 循环遍历多列:优化
- 循环遍历表单的记录与记录集
- 在r中使用for循环遍历名称向量
- 循环遍历两个数组的乘积
- 在查询中循环遍历字段名时出现类型不匹配错误
- 循环遍历r中的行数据框并检查if else函数语句
- 如何循环遍历组中立即嵌套的形状(VBA)
- 循环遍历对象数组并更新每个对象
- 循环遍历嵌套对象数组以检查空字符串es6
- r语言 - 循环遍历行并在满足条件时更改值
- 循环遍历对象数组,提取嵌套数组中的数据
- 如何循环遍历字典值并获取两个数字之间的所有数字
- 循环遍历python中的变量
- scala检查连接两个向量时是否循环遍历vector中的所有元素
最新更新
- Flutter:选中复选框时如何更改标题:TextStyle ?
- 为什么在反应中手动改变状态是一个反模式?
- 我们如何从"git 日志"中排除"由'git notes add'添加的注释"?
- Python递归函数背后的逻辑
- numpy数组大小改变,可能表示二进制不兼容
- 如何在另一个选择菜单中使用来自一个选择菜单的消息
- 如何转换int值从csv到datetime在Spark SQL?
- 如何在同一行中添加输入和按钮
- 让加密403错误当在遗留(EOL)上安装certbot-auto时需要SNI错误
- C对文本文件中的整数进行选择排序,并将排序后的数字写入新文件
- 如何使Java Rest API在处理前半部分后返回响应,然后在返回响应后继续后半部分?
- SvelteKit未看到[id].苗条的文件
- Gitlab CI and php verstion
- ROS2-Gazebo:在立方体的一侧显示图像
- appery.模态离子1中的IO固定组件
- 一种检查is_explicit _constructible的方法
- 从电子表格自动填充谷歌文档
- 由CSS值更改触发的CSS动画
- CSS Sticky属性在本演示中不起作用
- NodeJs与xmlrpc服务器通信,并对node-xmlrpc库进行base64编码,将下载的url图像编码为base
- 在管道中使用powershell如何使用在azure devops中触发的管道运行来获取shelvesset编号.<
- 我希望在表格单元格内的左、右位置的同一行中有不同的文本
- Entity Framework ExecuteDelete没有按预期工作
- 颤振只加载某些riv (.riv)文件
- Python问题我如何循环回我的代码?
- asyncpg.exceptions.InvalidAuthorizationSpecificationError Py
- 为什么我的阅读更多按钮不工作?
- 如何得到拆分字符后的单词
- 在列表框之间移动项
- 设置 SKEmitterNode 的 'targetNode' 会导致奇怪的 'zPosition' 行为
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium