首页 > 解决方案 > 用新行替换逗号但保留第一列

问题描述

我正在尝试对我拥有的一些超长文件进行排序,其中我在同一行上有一些基因的信息,但我希望它们出现在多行上,就像这样:

Gene1    A,    B,    C
Gene2    A
Gene3    A,    B

但我想要的是:

Gene1    A
Gene1    B
Gene1    C
Gene2    A
Gene3    A
Gene3    B

我可以用 sed 或 tr 轻松地用换行符替换逗号,但我不确定如何保留第一列中的基因名称

有小费吗?

标签: linux

解决方案


这是一个单行:

awk -F "[, \t][ \t]*" '{ first=$1; for(i=2; i<=NF; i++) printf "%s\t%s\n", first, $i; }' inputfile

从您的示例中,我猜想这些字段可以用逗号分隔,后跟制表符或空格或仅制表符或空格序列。这就是为什么我使用选项将字段分隔符设置-F为正则表达式。

对于输出,我使用制表符将第一个单词与另一个单词分开。

如果文件包含只有一个单词的行,则脚本不会为该行打印任何内容。


推荐阅读