题
我需要在一个文件中将不同的代码放到许多文件中。 该文件由AWK的创建者在其主页上共享。 该文件也是此处,以方便使用。
我对问题的尝试
我可以通过
获取每个代码所在的行awk '{ print $1 }'
然而,我不知道如何
- 获取确切的行号,以便我可以使用它们
- 收集特定行之间的代码,以便忽略每行的第一个单词
- 将这些单独的代码放入新文件中,这些文件由行 中的第一个单词命名 醇>
我确信这个问题可以通过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
解决方案
你有没有尝试过:
- 使用以下内容创建文件unbundle.awk: 醇>
-
从文件awkcode.txt中删除以下行:
#unbundle - 将捆绑包解压缩到单独的文件中
醇>
- 运行以下命令: 醇>
$ 1!= prev {close(prev); prev = $ 1} {print substr($ 0,index($ 0,&quot;&quot;)+ 1)&gt; $ 1}
$ 1!= prev {close(prev); prev = $ 1} {print substr($ 0,index($ 0,&quot;&quot;)+ 1)&gt; $ 1}
awk -f unbundle.awk awkcode.txt
其他提示
您是否尝试以该格式解压缩文件?这是一种shell存档。有关详细信息,请参阅 http://en.wikipedia.org/wiki/Shar
如果用awk执行该程序,awk将创建所有这些文件。您不需要编写或重写太多。你可以简单地运行那个awk程序,它应该仍然有效。
首先,在“plain”中查看文件。格式。 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()
awk文件awkcode.txt不应包含任何BLANK行。如果遇到任何空行,则awk程序失败。没有错误检查来过滤掉代码中的空白行。经过几天的奋斗,我才能发现这一点。