无法将一个文件中的代码分隔为AWK / Python中的多个文件

时间:2009-03-11 01:06:35

标签: python awk

我需要在一个文件中将不同的代码放到许多文件中。 该文件由AWK的创建者在其主页上共享。 该文件也是here,方便使用。

我对问题的尝试

我可以通过

获取每个代码所在的行
awk '{ print $1 }'

然而,我不知道如何

  1. 获取确切的行号,以便我可以使用它们
  2. 收集特定行之间的代码,以便忽略每行的第一个单词
  3. 将这些单独的代码放入新文件中,这些文件由行
  4. 中的第一个单词命名

    我确信这个问题可以通过AWK和Python解决。也许,我们需要一起使用它们。

    第一个答案后

    [edit]

    当我尝试使用awk执行它时出现以下错误

    $awk awkcode.txt 
    awk: syntax error at source line 1
     context is
         >>> awkcode <<< .txt
    awk: bailing out at source line 1
    

3 个答案:

答案 0 :(得分:3)

你有没有尝试过:

  1. 使用以下内容创建文件unbundle.awk:
  2. $ 1!= prev {close(prev); prev = $ 1}            {print substr($ 0,index($ 0,“”)+ 1)&gt; $ 1}

    1. 从文件awkcode.txt中删除以下行:

      #unbundle - 将捆绑包解压缩到单独的文件中

    2. $ 1!= prev {close(prev); prev = $ 1}            {print substr($ 0,index($ 0,“”)+ 1)&gt; $ 1}

      1. 运行以下命令:
      2. awk -f unbundle.awk awkcode.txt

答案 1 :(得分:2)

您是否尝试以该格式解压缩文件?这是一种shell存档。有关详细信息,请参阅http://en.wikipedia.org/wiki/Shar

如果用awk执行该程序,awk将创建所有这些文件。您不需要编写或重写太多。你可以简单地运行那个awk程序,它应该仍然有效。

首先,以“普通”格式查看文件。 http://dpaste.com/12282/plain/

其次,将文件的普通版本保存为'awkcode.shar'

第三,我认为您需要使用以下命令。

awk -f awkcode.shar

如果你想用Python程序替换它,它就是这样的。

import urllib2, sys

data= urllib2.urlopen( "http://dpaste.com/12282/plain/" )
currName, currFile = None, sys.stdout
for line in data:
    fileName, _, text= line.strip().partition(' ')
    if fileName == currName:
        currFile.write(line+"\n")
    else:
        if currFile is not None:
            currFile.close()
        currName= fileName
        currFile= open( currName, "w" )
if currFile is not None:
    currFile.close()

答案 2 :(得分:0)

awk文件awkcode.txt不应包含任何BLANK行。如果遇到任何空行,则awk程序失败。没有错误检查来过滤掉代码中的空白行。经过几天的奋斗,我才能发现这一点。