bash - 如果第 2 列相同,则减去第 1 列中的值
问题描述
我有以下格式的文件:
0.019059000 15150000000
0.037088000 15150000000
0.035007000 15150000001
0.047622000 15150000001
0.053359000 15150000002
0.060405000 15150000002
0.068598000 15150000003
0.081587000 15150000003
当第 2 列相同时,我想减去第 1 列。例如对于输入文件,我想要这样的东西:
0.018029 15150000000
0.012615 15150000001
0.007046 15150000002
0.012989 15150000003
输入文件第 2 列上的所有值成对出现,例如 15150000000 仅存在两次,15150000001 仅存在两次等。
任何帮助都非常受欢迎!
解决方案
awk
救援!(没有错误检查。)
$ awk 'p==$2 {print $1-pv,p} {p=$2; pv=$1}' file
0.018029 15150000000
0.012615 15150000001
0.007046 15150000002
0.012989 15150000003
对于同一键的未排序但又重复的记录
$ awk '$2 in a {print $1-a[$2],$2; delete a[$2]; next} {a[$2]=$1}' file
0.018029 15150000000
0.012615 15150000001
0.007046 15150000002
0.012989 15150000003
如果第二个值并不总是大于第一个值并且您想要绝对差
$ awk 'function abs(x) {return x<0?-x:x}
$2 in a {print abs($1-a[$2]),$2; delete a[$2]; next}
{a[$2]=$1}' file
推荐阅读
- ruby-on-rails - 如何在 Ruby on Rails 上设置用户名验证?
- javascript - Application.js 找不到@rails
- microservices - 我不懂事件溯源
- reactjs - 如何始终覆盖具有不确定后缀的 JSS 样式?
- python - discord.py-rewrite 'VoiceClient' 对象没有属性 'ws'
- python - 使用 pip 安装 Python 包时出错:
- javascript - 在 Javascript 中,什么被认为是“计算成本高”?
- reactjs - 为什么 React 状态不会与受控组件的输入更改同时更改
- php - PHP将键值对添加到数组中,其中值是数组,键是ID
- pandas - 在 MatPlotLib 中绘制不同时基上的两个并行测量之间的差异