0

我需要将不同的代码放在一个文件中的多个文件中。该文件显然由 AWK 的创建者在其主页上共享。该文件也在这里以方便使用。

我对这个问题的尝试

我可以通过以下方式获取每个代码所在的行

awk '{ print $1 }'

但是,我不知道如何

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

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

[编辑]在第一个答案之后

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

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

3 回答 3

3

您是否尝试过:

  1. 创建具有以下内容的文件 unbundle.awk:

$1 != prev { close(prev); prev = $1 } { print substr($0, index($0, " ") + 1) >$1 }

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

    # unbundle - 将一个包解压成单独的文件

$1 != prev { close(prev); prev = $1 } { print substr($0, index($0, " ") + 1) >$1 }

  1. 运行以下命令:

awk -f unbundle.awk awkcode.txt

于 2009-03-11T10:56:35.560 回答
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()
于 2009-03-11T01:38:06.497 回答
0

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

于 2013-10-07T07:47:06.670 回答