【问题标题】:How to split this text file by shell?如何通过shell分割这个文本文件?
【发布时间】:2013-10-06 19:26:01
【问题描述】:

我想用shell来分割这个文件:

ID: xxx
Name: xxx
HW =
In-class = 
Comments:

ID: yyy
Name: yyyy
HW =
In-class = 
Comments:

ID: zzz
Name: Zzzz
HW =
In-class = 
Comments:

因此,每个段落都保存到名为FILE01 的文件中,该文件位于段落的ID 文件夹中。

例如段落:

ID: zzz
Name: Zzzz
HW =
In-class = 
Comments:

应该保存到文件./zzz/FILE01

我该怎么做?

【问题讨论】:

  • 我试图修复格式,如果需要请检查和edit
  • 您所说的“shell”实际上是指只是 shell,还是您可以使用实际上对此有意义的实用程序?
  • 因为这个文件是在linux中使用的,而且我对bash shell有点了解..你能用其他方法制作吗?
  • 你已经尝试过什么?如果“ID”字段不是唯一的会发生什么?是否所有字段值都限制在一行中,或者它们可以占用多行吗?
  • “ID”应该是唯一的。 “cmets”可能有几行

标签: linux bash shell awk split


【解决方案1】:

请试试这条线:

 awk -v RS= '{print > "~/"$2"/FILE01"}' file    

这假定那些目录 (xxx, yyy,zzz) 已经存在。

【讨论】:

    【解决方案2】:

    awk 很容易做到这一点:

    $ ls 
    file
    
    $ awk '{system("mkdir -p "$2); print > ($2"/FILE01")}' RS= file
    

    生产:

    $ ls
    file  xxx/  yyy/  zzz/
    
    $ cat xxx/FILE01 
    ID: xxx
    Name: xxx
    HW =
    In-class =
    Comments:
    
    $ cat yyy/FILE01 
    ID: yyy
    Name: yyyy
    HW =
    In-class =
    Comments:
    
    $ cat zzz/FILE01 
    ID: zzz
    Name: Zzzz
    HW =
    In-class =
    Comments:
    

    【讨论】:

    • +1 如果 $2 包含通配符,为了避免鼻恶魔,你应该引用它,即{system("mkdir -p \""$2"\""); print > ($2"/FILE01")}
    猜你喜欢
    • 2016-03-21
    • 2011-12-20
    • 2021-08-31
    • 2014-07-24
    • 1970-01-01
    • 2016-02-06
    • 2017-02-09
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多