【问题标题】:Converting variable tab limited file to new line entry将变量选项卡将文件转换为新行条目
【发布时间】:2015-07-16 03:46:54
【问题描述】:

我有一个大文件(超过 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 或任何其他文件脚本语言来完成,而无需手动检查并修复每一行

【问题讨论】:

    标签: file awk sed


    【解决方案1】:
    $ 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&lt;=NF;i++)

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

    • print $1"\t"$i

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

    【讨论】:

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

      【讨论】:

      • 不错的 sed-fu。加 1。
      猜你喜欢
      • 2016-12-12
      • 2013-08-08
      • 2017-05-15
      • 2013-11-26
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多