插入新行而不是制表符时保留第一列

时间:2015-03-26 09:44:01

标签: linux awk

我有一个看起来像这样的文本文件:

A    one    two    three
B    four    five   six

每个标签分隔。

我希望每个标签都有换行符,但保留第一列如:

A    one
A    two
A    three
B    four
B    five
B    six

插入我知道的新行(awk'{$ 1 = $ 1} 1'FS =“\ t”OFS =“\ n”)将不会保留我的第一列

有人可以帮我重新格式化我的文件吗?

1 个答案:

答案 0 :(得分:1)

使用awk:

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

代码非常简单:

{                               # in every line
  for(i = 2; i <= NF; ++i) {    # wade through the fields, starting
                                # with the second
    print $1, $i                # and print the first field followed by
                                # the current one.
  }
}

-F '\t'选项将输入字段分隔符设置为选项卡,因此该行在选项卡处拆分,-v OFS='\t'将输出字段分隔符设置为制表符,以便输出中的字段为也用标签分隔。

然后:

$ od -c filename     # to show that the input file is tab-separated
0000000   A  \t   o   n   e  \t   t   w   o  \t   t   h   r   e   e  \n
0000020   B  \t   f   o   u   r  \t   f   i   v   e  \t   s   i   x  \n
0000040
$ awk -F '\t' -v OFS='\t' '{ for(i = 2; i <= NF; ++i) print $1, $i }' filename
A   one
A   two
A   three
B   four
B   five
B   six