如何使用 awk 将一组重复的行转置为列

2024-04-22

我有一个文本文件,其中包含 7 列数据,格式如下:

18030   AAJ51   FTO rs9939609   C__30090620_10  A   T
18030   AAJ51   CAT rs1001179   C__11468118_10  C   C
18030   AAJ51   CCL2    rs1024611   C___2590362_10  G   G
18030   AAJ51   TAS2R38 rs10246939  C___9506826_10  C   C
20287   AAJ51   FTO rs9939609   C__30090620_10  A   T
20287   AAJ51   CAT rs1001179   C__11468118_10  C   C
20287   AAJ51   CCL2    rs1024611   C___2590362_10  A   G
20287   AAJ51   TAS2R38 rs10246939  C___9506826_10  T   T

第 2、3、4、5 列是恒定且重复的。

变量是第 1、6 和 7 列。

我想以这种方式转置数据:

        FTO       CAT       CCL2        TAS2R38
        rs9939609 rs1001179 rs1024611   rs10246939
18030   AT        CC        GG          AT
20287   AT        CC        AG          TT

虽然示例显示每个 ID 4 行(第一列中的 5 位数字是 ID),但实际文件每个 ID 有 128 行,因此执行匹配或正则表达式不切实际,并且更喜欢迭代多行的方法。

我在上面看到了这个例子转换 n 行数 https://stackoverflow.com/questions/25901381/convert-n-number-of-rows-to-columns-repeatedly-using-awk但我不确定如何修改此应用程序。

更新:CRLF 结尾可能会导致格式问题,可以使用 dos2unix 等工具解决


GNU Awk解决方案:

awk '{ 
         if (!keys[$3]++) { b[++c] = $3; row1 = row1 OFS $3; row2 = row2 OFS $4 }
         line = groups[$1][$3];
         groups[$1][$3] = (line == ""? $6$7: line OFS $6$7) 
     }
     END{ 
         print row1 ORS row2; 
         for (i in groups) {
             r = i; 
             for (j in b) r = r OFS groups[i][b[j]];
             print r 
         } 
     }' OFS='\t' file | column -txn

输出:

       FTO        CAT        CCL2       TAS2R38
       rs9939609  rs1001179  rs1024611  rs10246939
18030  AT         CC         GG         CC
20287  AT         CC         AG         TT
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 awk 将一组重复的行转置为列 的相关文章

  • awk gzip 输出到多个文件

    我可以像这样 gzip awk 输出 echo col1 col2 awk print 1 gzip gt out 但是是否也可以将两个 awk 输出文件流通过管道传输到 gzip 这不起作用 echo col1 col2 awk prin
  • Jupyter笔记本的bash_kernel可以安装在Windows 7操作系统中吗

    Jupyter Notebook 提供 bash kernel 在 Windows 计算机中安装失败 因为无法安装 pip pexpect https pexpect readthedocs org en stable 3 3 这是 bas
  • 如何使用一个简单的命令将大量变量附加到一个变量

    我想将所有变量粘贴到一个变量中 A blah AA blah2 AAA blah3 AAB blah4 AAC blah5 lets pretend theres 100 more of these Variable composition
  • awk -cut 如何删除带有字段分隔符的第二列

    我有一个 csv 文件 其中的数据如下 o 022344527 o lonyfoe o Joe o Joe o Otieno 我正在尝试删除第二列 Output o lonyfoe o Joe o Joe o Otieno 有任何想法吗 这
  • 如何用制表符替换换行符?

    我有如下所示的图案 hi hello hallo greetings salutations no more hello for you 我正在尝试使用以下命令用制表符替换所有换行符 sed e s n t g 但它不起作用 有人可以帮忙吗
  • 在mawk中使用strftime函数

    我正在尝试创建 AWK 脚本 该脚本将根据某种模式过滤输入文件 并使用 strftime 函数进行一些计算 2 HB 2 n print strftime Y 使用的解释器是mawk 使用此命令触发此脚本时 awk f script3 in
  • 通过管道传输到 awk 的 svn 命令的 Bash 别名

    我经常输入这个命令 并试图给它起别名 但由于某种原因不能 for FILE in svn stat awk print 2 do svn revert FILE done 这显然会进行大量的 svn 恢复 当我给它起别名时 alias re
  • 过滤出现在两个标记之间的文本

    Part 1 创建仅输出由两个预定义标记包围的文本的文本过滤器的最简单方法是什么 我不介意使用任何标准工具 sed awk python 例如 我希望只显示由 标记开始 和 标记结束 包围的文本 input Text 1 Mark Begi
  • 从命令行查找并替换多行文本

    我正在尝试使用还执行其他操作的脚本编辑配置文件 该脚本需要找到某些连续的文本行并将其删除 它需要在适当的位置粘贴一个新配置 该新配置从旧配置所在的同一行开始 在新旧配置中 空间的使用都很重要 在 configfile php 中 此文本块
  • awk:多个CSV文件中多列数据的数学运算

    我正在开发 bash 脚本 该脚本循环多列数据填充并执行集成的 AWK 代码来操作多列数据 bin bash home PWD folder with the outputs rescore home rescore folder with
  • 使用 awk 仅从字符串中获取数字

    背景 我有一个专栏should以 描述文本 ref12345678 的形式获取用户输入 我有现有的脚本可以获取参考号 但不幸的是一些用户错误地添加了它 所以而不是 ref12345678 有可能 ref 12345678 RF1234567
  • 执行 tail -F 直到匹配模式

    我想做一个tail F在文件上直到匹配模式 我找到了一种使用方法awk 但恕我直言 我的命令并不是很干净 问题是我need由于某些限制 只能用一行来完成 tail n 0 F tmp foo awk W interactive if 1 E
  • 使用 awk(或熟悉的)将多行合并为 1 行

    我需要将 nmap 输出中的多行合并为一行 FROM Nmap scan report for example com 22 tcp open ssh 80 tcp open http 111 tcp open rpcbind 1720 t
  • 使用 awk 对单独行上的多个字段进行数学运算

    我一直在对 3 字段 x 2 行文件进行一些数学运算 如下所示 3216 01 2724 81 1708 25 1762 48 617 436 1650 79 我的问题是如何引用第一行的第一个字段并在同一计算中引用第二行的第一个字段 为了完
  • 如何使用 awk 将一组重复的行转置为列

    我有一个文本文件 其中包含 7 列数据 格式如下 18030 AAJ51 FTO rs9939609 C 30090620 10 A T 18030 AAJ51 CAT rs1001179 C 11468118 10 C C 18030 A
  • awk 排序多维数组[重复]

    这个问题在这里已经有答案了 GNU awk 支持多维数组 gnu org software gawk manual gawk Arrays of Arrays q 1 1 dog q 1 2 999 q 2 1 mouse q 2 2 77
  • 使用awk对字段进行排序和排列

    我现在正在尝试学习 awk 我想做一项特定的任务 我的问题与之前发布的问题范围相似 使用 awk 将列转置为行 https stackoverflow com questions 13634816 using awk to transpos
  • Bash 脚本问题

    我可以很好地运行这个命令 并得到我想要的输出 ifconfig eth0 grep HWaddr awk print 5 但是 当我将命令设置为变量并打印该变量时 出现错误 CASS INTERNAL ifconfig eth0 grep
  • 创建带小数秒的时间戳

    awk可以使用 strftime 函数生成时间戳 例如 awk BEGIN print strftime Y m d H M S 2019 03 26 08 50 42 但我需要一个带有小数秒的时间戳 最好是纳秒 gnu date可以用 N
  • 如何使用 awk 或 sed 将“[1.0 - 4.0]”等字符串替换为数值?

    我有一个 CSV 文件 正在通过一组 awk sed 命令进行管道传输 CSV 文件中的某些行如下所示 10368 Verizon DSL DSL NY NORTHEAST 5 4 1 1 3 0 0 384 0 768 其中第 8 列和第

随机推荐

  • 何时在 odoo 中使用 api.one 和 api.multi |打开程序?

    最近odoo 以前的OpenERP V8已经发布了 在新的 API 方法中引入了装饰器 在models py方法需要修饰 api one or api multi 参考odoo 文档 https www odoo com documenta
  • 为什么我的模型在帖子中丢失下拉列表项目?

    我有一个简单的页面 mvc 只有一个操作 在索引操作中的 Get 方法中 我创建了属性 model categoria 的实例 并使用 3 个项目进行值 问题是 如果我运行操作的后索引 如下所示 则会出现错误 因为与 model categ
  • Ruby 数组each_slice_with_index?

    如果我有arr 1 2 3 4 我知道我可以做以下事情 gt arr each slice 2 a b puts a b 1 2 3 4 和 gt arr each with index x i puts i x 0 1 1 2 2 3 3
  • java 8 可选列表收集以列出编译错误

    我无法理解之间的区别 Stream
  • 为什么使用 ASP.NET MVC 部分视图 (.ascx)

    正如题目所说 我为控制器方法添加视图的原因和场景是什么 我应该选中 创建部分视图 ascx 复选框 两个主要原因是可重用性和可读性 如果您计划在多个页面中包含相同的信息 请将其放入视图中 就像在 WebForms 中使用 UserContr
  • 为什么pivot_wider要么将单个值读取为重复项,要么创建一个宽而长的小标题(不合并行)?

    我浏览了此处发布的大部分相关问题 但似乎没有一个问题与我面临的问题相同 根据我的阅读 此处已经发布的问题与长格式数据中的重复值 缺乏唯一标识符 有关 这会导致带有列表列的宽格式数据 这通常可以通过创建虚拟变量列来解决这是一串唯一的数字 我已
  • JTable JComboBox 第一项名称错误

    我添加了一个摇摆JComboBox to a JTable 但我的第一个项目的标签始终是javax swing JComboBox 我究竟做错了什么 更新 这是我的代码 import java awt Color import java a
  • 如何让 Pool.map 采用 lambda 函数

    我有以下功能 def copy file source file target dir pass 现在我想用multiprocessing立即执行此函数 p Pool 12 p map lambda x copy file x target
  • 核心音频指导/入门

    我一直在阅读 ios 4 的核心音频 目的是构建一个小测试应用程序 目前我对所有 api 的研究感到非常困惑 理想情况下 我想知道如何从两个 mp3 中提取多个样本到数组中 然后在回调循环中 我想将这些样本混合在一起并将它们发送到扬声器 苹
  • Delphi - MySQL 最好使用的数据感知组件

    我需要我的应用程序连接到我的 Web 服务器的 MySQL 数据库 最好的选择是什么 首选数据感知组件 我尝试了 zeos 7 但不断收到错误 SQL 错误 客户端不支持服务器请求的身份验证协议 考虑升级MySQL客户端 但未能修复 Tha
  • 在比较分支时,有没有办法在 GitHub 中“隐藏”合并提交? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的 10
  • 如何使用 Junit 对 cordova 插件进行单元测试?

    我已经完成了一些 Cordova 插件 我想对其编写单元测试 这个想法是 例如 在我运行 cordova build android 后 测试文件将被移动到 Android 上的正确文件夹 我可以使用 Java 运行测试 那可能吗 我见过一
  • 如何根据单元格值使用颜色设置 Asp.net GridView 单元格的样式

    我有一个Gridview 它有一个名为student Class 网格视图上大约有 80 个类 我已使用 GroupBy 查询对此类进行分组 现在我想用不同的颜色来设计这个不同的类 这怎么可能 把所有的类都写在上面并不容易RowDataBo
  • Android webView 的 iframe 的 shouldOverrideUrlLoading

    我有一个由 Javascript 控制的本地网站 并将其加载到 WebView 中 该网站实际上是一个带有 iframe 的主页 其内容根据用户输入而变化 主页上有一个 下一步 按钮 它运行一些 javascript 函数并决定在 ifra
  • 两个数组的乘积之和(点积)

    首先 我知道我的标题可以更好地表述 但我的数学课已经结束了 我已经记不起正确的单词了 我需要做这样的事情 伪c int digits1 new int 10 0 1 2 3 4 5 6 7 8 9 int digits2 new int 1
  • Material Design lite 所需的复选框验证未显示错误消息

    我正在使用 Material Design Lite 来制作表单 我面临的问题是 当在复选框上设置所需的验证时 它似乎在渲染后立即隐藏错误消息 请注意 实际验证正在按预期进行 只是未显示错误消息 这是一个解决这个问题的代码笔 http co
  • Android Gradle:找不到符号变量

    我在使用 gradle 构建时遇到错误 如下所示 error cannot find symbol variable image name 我在用着ContextCompat getDrawable getActivity R drawab
  • 在Python中将字符串截断为特定字节数

    如何将字符串截断为不超过 50 个字节 a asdfzx awelkjawletjawetr dlgawklejtwgasdgsdfgd sdfasdfsdafa rewgargasregawergedrhsedhesrdhrthdrfjy
  • Selenium WebDriver 和下拉框

    如果我想选择下拉框的一个选项 有多种方法可以实现 我一直用 driver findElement By id selection sendKeys Germany 但这并不是每次都有效 有时会选择另一个选项 所以我用谷歌搜索了一下 发现这段
  • 如何使用 awk 将一组重复的行转置为列

    我有一个文本文件 其中包含 7 列数据 格式如下 18030 AAJ51 FTO rs9939609 C 30090620 10 A T 18030 AAJ51 CAT rs1001179 C 11468118 10 C C 18030 A