通过 awk 将频率(出现次数)添加到我的文本表中

2024-02-01

给定这个输入表:

pac1 xxx 
pac1 yyy
pac1 zzz
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz

我需要将频率添加到第三列,如下所示:

pac1 xxx 2/3
pac1 yyy 1/3
pac1 zzz 3/3
pac2 xxx 2/2
pac2 uuu 2/2
pac3 zzz 2/2
pac3 uuu 2/2
pac4 zzz 3/1

其中第一个数字是第二列中出现的次数。

awk '{print $2}' input | sort | uniq -c

斜杠后的数字是第一列的唯一出现次数:

awk '{print $1}' input | sort | uniq -c

我想在 awk 中使用实现。

EDIT:

请修改输出 - 第一列是名称,我需要计算第一列中出现了多少个 uniq 名称,例如:

pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4

所以唯一的名称只有 pac1,pac2,pac3,pac 4 => 4

像这样的东西:

occur=$(awk '{print $1}' input | sort | wc -l)

awk -v occur=$occur '{col2[$2]++} {print $0, col2[$2] "/" occur}' file

A想避免变量$出现。


只需读取文件两次:首先计算值并将它们存储在数组中,然后打印其值:

$ awk 'FNR==NR {col1[$1]++; col2[$2]++; next} {print $0, col2[$2] "/" col1[$1]}' file file
pac1 xxx 2/3
pac1 yyy 1/3
pac1 zzz 3/3
pac2 xxx 2/2
pac2 uuu 2/2
pac3 zzz 3/2
pac3 uuu 2/2
pac4 zzz 3/1

The FNR==NR {things; next}是在读取第一个文件时执行操作的技巧。它基于使用FNR and NR:前者表示记录的字段编号,后者表示记录的编号。这意味着 FNR 包含当前文件的行数,而 NR 包含到目前为止已读取的总体行数,使得FNR==NR仅在读取第一个文件时为 true。通过添加next我们跳过当前行并跳到下一行。

查找更多信息惯用的 awk http://backreference.org/2010/02/10/idiomatic-awk/.


关于您的更新:如果您希望最后一项包含第一列中不同值的计数,只需检查创建的数组的长度。这将告诉您它包含的许多不同索引,以及您想要的值:

$ awk 'FNR==NR {col1[$1]++; col2[$2]++; next} {print $0, col2[$2] "/" length(col1)}' file file
pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 3/4
pac3 uuu 2/4
pac4 zzz 3/4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 awk 将频率(出现次数)添加到我的文本表中 的相关文章

随机推荐

  • 使用 Passport 和 Laravel 进行身份验证时返回访问令牌和用户

    我正在使用 Laravel 5 4 和 Passport 创建一个 API API 授权是使用密码授予类型完成的 以下是请求示例 http new GuzzleHttp Client response http gt post http y
  • 在 Woocommerce 结帐页面中的所有默认通知之前显示自定义通知

    我使用以下代码在结帐页面中向未登录的 woocommerce 用户 访客 显示自定义消息 add action woocommerce before checkout form my custom message function my c
  • 将保存/更新调用轨道转换为 sql

    我想获取运行时生成的sql save 当我在控制台中运行此命令时 irb main 018 0 gt a User last irb main 018 0 gt a first name gt Mohan irb main 019 0 gt
  • Powershell进度条

    我是 Powershell 新手 在获取进度条来使用 foreach object 循环时遇到问题 如果可能的话 感谢 Chris 下面是我到目前为止所得到的 我的问题是进度条到达某个点 然后出现错误 101 参数大于最大允许范围 100
  • 如果 RSS 源未更改,则不执行任何操作

    我想每隔几分钟运行一个Python脚本 该脚本首先从 rss feed 中获取最新文章 使用 feedparser 我想要的是 当最新的文章与上次运行的文章相同时 脚本就结束了 我该如何实现这个目标 既然你在 python 问题中提到 fe
  • UML 的高效替代方案

    我发现 UML 很难快速创建 我想更快地表达我的想法 特别是对于小型开源项目 如果它足够大 我会费心使用 UML 但是这个项目对于这种事情来说太小了 我不想要另一个让我觉得 不 我稍后再做 的工具 有什么建议么 UML 不是一种工具 而是一
  • 是否可以在免费套餐中使用 Google Cloud Kubernetes 集群?

    纵观免费套餐特点 https cloud google com free docs gcp free tier对于 Google Cloud 它指出 VM 实例必须位于以下区域us west1 VM 机器类型必须是f1 micro 因此 为
  • Java 方法中 byte[] 和 byte ... 的区别

    有人问我这两个方法参数之间有什么区别以及为什么要在专门分配的数组上使用 putMessage byte send putMessage byte send 我无法自信地回答他们 也不记得 叫什么 The 在你的第一个例子中被称为vararg
  • 如何在node.js后端获取昨天的日期?

    我在用日期格式包在节点后端 我可以使用获取今天的日期 var today dateFormat new Date 以相同或其他方式我想要昨天的约会 我仍然没有得到任何正确的方法 目前我正在使用大量代码手动计算昨天的日期 除了手动写入还有其他
  • 2 个容量相同的背包 - 为什么我们不能两次找到最大值

    如果给你一组具有值和重量的物品 w1 v2 w2 v2 wn vn 以及两个容量相等的背包 Knap1 和 Knap2 C 则目标是确定可以分别放入 Knap1 和 Knap2 的物品 S1 和 S2 的最佳子集 并最大化背包的价值和容量
  • 如何确保表单中编码的文本是utf8

    我有一个 html 框 用户可以用它输入文本 我想确保在框中输入的所有文本都以 UTF 8 编码或在用户完成输入时转换为 UTF 8 此外 我不太明白在输入文本框时如何选择各种UTF编码 一般来说 我对以下内容感到好奇 当用户在文本框中键入
  • Sql Server Management Studio 对象资源管理器消失 - 丢失 - 消失

    SQL Server 管理工作室Object Explorer菜单消失了 捷径F8和view gt object explorer方法也不做任何事情 我点击了键盘上的所有内容 用谷歌搜索 但什么也没有 我真的需要这个回来 在没有对象资源管理
  • Font Awesome 无法加载资源 /font/fontawesome-webfont.woff?v=3.0.1

    网站上一切看起来都很好 但这两个错误显示在控制台中 如果我点击该网址 就会下载字体 一直试图追踪这个问题一段时间 但我在控制台中收到两个错误 无法加载资源资源 font fontawesome webfont woff v 3 0 1无法加
  • JavaScript 超过超时时间

    我使用 jquery 开发移动应用程序 下面是我的代码 当我向包含的页面添加 5 或 6 行时 一切顺利 但如果我添加多行显示错误消息 Javascript执行超时 function succes recu list rubrique tx
  • 在 C++ 中查找大于 4GB 的文件? [复制]

    这个问题在这里已经有答案了 我正在使用 MS Visual Studio 2012 编译器 并且正在 x64 发布模式下构建 使用 ifstream 我可以读取大于 4GB 的文件 问题是 我无法找到 10GB 文件中间的位置 当我像这样使
  • SQL 计数日期范围

    我正在尝试查询 SQL 数据库以获取每个客户在特定日期范围内发出的订单数 我有一个订单列表如下 CustomerName ClientID DateOrdered Customer No 2 10 2011 11 25 Customer N
  • 如何在 OSX 10.9 上安装 gdb

    如何在 OSX 10 9 上安装 gdb 我尝试使用 macports port install gdb Password gt Updating database of binaries 100 0 gt Scanning binarie
  • Android MotionEvent.getActionIndex() 和 MultiTouch

    我试图在事件 MotionEvent ACTION MOVE 发生时获取指针 id 我通过调用 event getActionIndex 来做到这一点 但对于第二个 第三个 第四个和第五个手指 它总是返回 0 我在 Galaxy S I90
  • 当经度 > 90 时,Python 纬度/经度中点计算给出错误结果

    当给定两端点的纬度和经度时 我有一个短函数来计算线的中点的问题 简单来说就是当经度大于 90度或小于90度时都能正常工作 对于地球的另一半 它提供了一个有点随机的结果 该代码是 javascript 的 python 转换 位于http w
  • 通过 awk 将频率(出现次数)添加到我的文本表中

    给定这个输入表 pac1 xxx pac1 yyy pac1 zzz pac2 xxx pac2 uuu pac3 zzz pac3 uuu pac4 zzz 我需要将频率添加到第三列 如下所示 pac1 xxx 2 3 pac1 yyy