根据制表符分隔文件的列添加新行

根据制表符分隔文件的列添加新行

我有一个像这样的制表符分隔文件:

211845  032
215979  002   071
217783  143   156   169
219750  111

对于具有多个制表符分隔条目的行,我想根据第一列的值添加新行。这是我想要的结果:

211845  032
215979  002
215979  071
217783  143
217783  156
217783  169
219750  111

感谢任何想法,这个让我难住了。

答案1

使用awk,对每行第一个字段之后的字段进行循环,并为每个字段打印一个新行。

awk -F'\t' -v OFS='\t' '{for (i=2;i<=NF;i++) print $1,$i}' file

输出:

211845  032
215979  002
215979  071
217783  143
217783  156
217783  169
219750  111

这样,我们就可以丢弃任何空白行或只有一个字段的行,这可能就是您想要的。为了保持它们原样,可以进行修改:

awk -F'\t' -v OFS='\t' 'NF<2 {print; next} {for (i=2;i<=NF;i++) print $1,$i}' file

答案2

GNU sed您可以使用其扩展正则表达式模式-E来帮助编写易于阅读的正则表达式来完成此操作。

sed -E '
  s/\t/\n/2;T
  s/^([^\t]+\t).*\n/&\1/
  P;D
' file

输出:

211845  032
215979  002
215979  071
217783  143
217783  156
217783  169
219750  111

  • 如果一行的制表符少于 2 个,则通过 T 命令将其原样显示。
  • 用P命令显示第一对,将第一个字段缝合在第一对的后面。
  • 这个过程一直持续到我们留下一个选项卡,然后通过第一步打印该选项卡。

相关内容