awk - 在一列中查找重复,然后在另一列中减去值
问题描述
我的输入文件列是:
a Otu1 w 4
b Otu1 x 1
c Otu2 y 12424
d Otu3 z 1756
我想搜索第二列的每个重复,在第四列中减去它们的值。我想要的输出是:
a Otu1 w 3
c Otu2 y 12424
d Otu3 z 1756
我在一个包含两列的小文件中尝试了以下 awk 脚本
a 3
a 1
b 4
awk '$1 in a{print $1, a[$1]-$2} {a[$1]=$2}' small_input_file
这只给了我减去的价值
a 2
如何为包含四列的输入文件修改此脚本?
谢谢。
解决方案
双重扫描算法不会关心有多少记录或它们是否连续
$ awk 'NR==FNR {a[$2]=$2 in a?a[$2]-$4:$4; next}
!b[$2]++ {print $1,$2,$3,a[$2]}' file{,}
a Otu1 w 3
c Otu2 y 12424
d Otu3 z 1756
推荐阅读
- r - 单击后将 shinydashboardPlus 侧边栏中的每个选项卡与主体中的不同选项卡连接起来
- c# - 字典
到 npgsqlParmeterCollection? - python - 如果未建立 Web 套接字连接,如何发送消息或中止到 http 错误页面?
- swift - 应用程序因更改音量而崩溃,状态 KVO 消息已收到但未针对 keypath “outputVolume”进行处理
- angular - 错误:没有用于具有未指定名称属性的表单控件的值访问器 - 角度反应式表单单元测试错误
- php - PHP PATCH 产品 PayPal 目录 API 格式错误的请求错误
- java - 反序列化文件以删除对象,然后再次进行序列化
- javascript - Reacr-Admin,OData:如何按嵌套数据过滤列表
- flutter - FutureBuilder 在通过 try/catch 收到失败后不更新
- laravel - 存储链接中的 Laravel 图像已损坏