linux - 用新行替换逗号但保留第一列
问题描述
我正在尝试对我拥有的一些超长文件进行排序,其中我在同一行上有一些基因的信息,但我希望它们出现在多行上,就像这样:
Gene1 A, B, C
Gene2 A
Gene3 A, B
但我想要的是:
Gene1 A
Gene1 B
Gene1 C
Gene2 A
Gene3 A
Gene3 B
我可以用 sed 或 tr 轻松地用换行符替换逗号,但我不确定如何保留第一列中的基因名称
有小费吗?
解决方案
这是一个单行:
awk -F "[, \t][ \t]*" '{ first=$1; for(i=2; i<=NF; i++) printf "%s\t%s\n", first, $i; }' inputfile
从您的示例中,我猜想这些字段可以用逗号分隔,后跟制表符或空格或仅制表符或空格序列。这就是为什么我使用选项将字段分隔符设置-F
为正则表达式。
对于输出,我使用制表符将第一个单词与另一个单词分开。
如果文件包含只有一个单词的行,则脚本不会为该行打印任何内容。
推荐阅读
- ms-access - 组合框保存 ID 而不是项目名称
- python - 为什么这个解决方案不适合“旋转数组”leetcode 问题?
- sql - 聚合访问 SQL 的问题
- xamarin.forms - VS2019 Xamarin Forms Remote IOS模拟器黑屏 - 如何修复?
- sql - Oracle -- 根据 varchar 时间戳提取月度数据
- django - Unity Facebook SDK 登录,使用 Django 服务在 Chrome 上遇到 CORS/CORB 问题
- compilation - 如何为 GDB 的 JIT 代码生成 ELF 文件格式?
- javascript - setItems Acrobat Pro 的分层命名
- linux - 为什么 dlsym 为非 pie 可执行文件返回 PLT 条目?
- kubernetes - kube-prometheus-stack - Grafana 中的新仪表板