将变量选项卡有限文件转换为新行条目

时间:2015-05-06 06:45:14

标签: file awk sed

我有一个巨大的文件(超过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或任何其他文件脚本语言来实现它,而无需手动浏览并修复每一行

2 个答案:

答案 0 :(得分:3)

$ awk '{for (i=2;i<=NF;i++)print $1,$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

以上产生空间分离的输出。如果您想要以制表符分隔的输出,请使用:

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

工作原理:

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

    这会在所有字段i上开始循环,从第二个字段开始,一直到最后一个字段。

  • print $1"\t"$i

    这会打印第一个字段,后跟一个标签,然后是第i个字段。

答案 1 :(得分:2)

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