1つのファイルのコードをAWK / Pythonの多くのファイルに分離できない
質問
1つのファイルにさまざまなコードを多くのファイルに配置する必要があります。 このファイルは、AWKの作成者がホームページで共有しています。 このファイルは、こちらでも簡単に使用できます。
問題への私の試み
各コードが位置する行を取得できます
awk '{ print $1 }'
ただし、方法がわかりません
- 正確な行番号を取得して使用できるようにする
- 特定の行間のコードを収集して、各行の最初の単語が無視されるようにする
- これらの個別のコードを新しいファイルに入れて、行の最初の単語で名前を付けます
この問題はAWKおよびPythonでも解決できると確信しています。おそらく、それらを一緒に使用する必要があります。
[編集] 最初の回答の後
awkで実行しようとすると、次のエラーが表示されます
$awk awkcode.txt
awk: syntax error at source line 1
context is
>>> awkcode <<< .txt
awk: bailing out at source line 1
解決
しようとしましたか:
- 次の内容のファイルunbundle.awkを作成します。
$ 1!= prev {close(prev); prev = $ 1} {print substr($ 0、index($ 0、&quot;&quot;)+ 1)&gt; $ 1}
-
ファイルawkcode.txtから次の行を削除します。
#unbundle-バンドルを個別のファイルに解凍します
$ 1!= prev {close(prev); prev = $ 1} {print substr($ 0、index($ 0、&quot;&quot;)+ 1)&gt; $ 1}
- 次のコマンドを実行します。
awk -f unbundle.awk awkcode.txt
他のヒント
その形式のファイルを解凍しようとしていますか?これは一種のシェルアーカイブです。詳細については、 http://en.wikipedia.org/wiki/Shar をご覧ください。 p>
そのプログラムをawkで実行すると、awkはそれらすべてのファイルを作成します。あなたは多くを書くか書き換える必要はありません。そのawkプログラムを実行するだけで、それでも動作するはずです。
まず、&quot; plain&quot;のファイルを表示します。フォーマット。 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に空白行を含めないでください。空白行が見つかると、awkプログラムは失敗します。コード内の空白行を除外するエラーチェックはありません。これは、数日間の闘争の末に見つけることができました。