从单个文件中提取文本并将这些文本写入多个文件

时间:2012-10-22 01:19:43

标签: unix sed awk

我正在努力实现以下目标。

  1. 在文本文件中找到第一个''符号(始终位于新行的开头),并使主变名跟在变量之后,例如'(主机) '变为'主机'。

  2. 在“ = - = - = ”分隔符的第一个实例和同一分隔符的第二个实例之间复制文本(' = - = - = ')到名为第1项中变量的新文件,例如 host-messages.txt

  3. 将第二个“ = - = - = ”分隔符实例和同一分隔符的第三个实例之间的文本复制到一个新文件,该文件的名称是第1项中的变量,例如主机df.txt

  4. 在“ = - = - = ”分隔符的第三个实例之间复制文本,然后在新的第一个字符的后续下一个“''实例例如“(主机名”)的下一个实例,以及名称为 host-dfa.txt

    < / LI>
  5. 重复步骤1到4直到文件结束,不再找到“(主机”。

  6. 无论如何,我想要实现的是提取数据,例如:

    (hostname1 : 056603)  1    
    =-=-=
    TEXT
    TEXT
    TEXT
    =-=-=
    TEXT2
    TEXT2
    TEXT2
    =-=-=
    TEXT3
    TEXT3
    TEXT3
    (hostname2
    =-=-=
    etc...
    

    新创建的文件应为hostname1-messages.txt,hostname1-df.txt和hostname1-dfa.txt。

    到目前为止我提出的最好的是

    awk '/=-=-=/{x="F"++i;next}{print > x;}' test.txt
    

    但它不起作用。

1 个答案:

答案 0 :(得分:1)

发布一些示例输入和预期输出以帮助我们帮助您,但这样的事情是您想要的(显然未经测试):

awk '
BEGIN{ sfx[1]="-messages.txt"; sfx[2]="-df.txt"; sfx[3]="-dfa.txt" }
sub(/^\(/,"") { host=$0; nr=0; next }
/=-=-=/ { nr++; next }
{ print > host sfx[nr] }
' file