将可变制表符限制文件转换为新行条目

Converting variable tab limited file to new line entry

我有一个巨大的文件(超过 1000 行),格式如下

000005  chair   chair   chair   chair   chair
000007  car
000009  horse   person  person  person
000012  car
000016  bicycle
000017  person  horse
000019  cat cat
000020  car

我想转换成下面这样

000005  chair   
000005  chair   
000005  chair   
000005  chair   
000005  chair
000007  car
000009  horse   
000009  person  
000009  person  
000009  person
000012  car
000016  bicycle
000017  person  
000017  horse
000019  cat 
000019  cat
000020  car

有没有一种方法可以通过 sed 或 awk 或任何其他文件脚本语言来完成,而无需手动检查并修复每一行

$ awk '{for (i=2;i<=NF;i++)print ,$i}' file
000005 chair
000005 chair
000005 chair
000005 chair
000005 chair
000007 car
000009 horse
000009 person
000009 person
000009 person
000012 car
000016 bicycle
000017 person
000017 horse
000019 cat
000019 cat
000020 car

以上生成 space 分隔的输出。如果你想要制表符分隔的输出,那么使用:

awk '{for (i=2;i<=NF;i++)print "\t"$i}' file

工作原理:

  • for (i=2;i<=NF;i++)

    这将开始遍历所有字段,i,从第二个开始一直到最后一个。

  • print "\t"$i

    这将打印第一个字段,然后是制表符,然后是第 i 个字段。

sed 's/[[:space:]]\{1,\}/\
 /g
:cycle
s/^\([^[:cntrl:]]*\)\(.*\)\(\n\) / /
t cycle
s/^\([^[:cntrl:]]*\)\n//' YourFile
  • 使用 (space 字符)作为 space 分隔符(您的示例似乎显示 2 或制表符)
  • 如果你会使用 awk 就更有趣了