1つのファイルのコードをAWK / Pythonの多くのファイルに分離できない

StackOverflow https://stackoverflow.com/questions/632958

  •  08-07-2019
  •  | 
  •  

質問

1つのファイルにさまざまなコードを多くのファイルに配置する必要があります。 このファイルは、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
役に立ちましたか?

解決

しようとしましたか:

  1. 次の内容のファイルunbundle.awkを作成します。

$ 1!= prev {close(prev); prev = $ 1}            {print substr($ 0、index($ 0、&quot;&quot;)+ 1)&gt; $ 1}

  1. ファイルawkcode.txtから次の行を削除します。

    #unbundle-バンドルを個別のファイルに解凍します

$ 1!= prev {close(prev); prev = $ 1}            {print substr($ 0、index($ 0、&quot;&quot;)+ 1)&gt; $ 1}

  1. 次のコマンドを実行します。

awk -f unbundle.awk awkcode.txt

他のヒント

その形式のファイルを解凍しようとしていますか?これは一種のシェルアーカイブです。詳細については、 http://en.wikipedia.org/wiki/Shar

そのプログラムを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プログラムは失敗します。コード内の空白行を除外するエラーチェックはありません。これは、数日間の闘争の末に見つけることができました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top