2

私は通常、すべての行から最後のトークンを削除する、各行から最初の 2 つのトークンを抽出する、各行をトークンに分割するなど、研究のためにかなりの量のテキスト処理を行う必要があります。

これを実行する最良の方法は何ですか? このためにPerlを学ぶべきですか?それとも、ある種のシェル コマンドを学習する必要がありますか? 主な関心事は速度です。そのようなもののために長いコードを書く必要がある場合、それは目的を無効にします.

編集:

@Mimisbrunnr の勧めで sed の学習を開始しましたが、すでに必要なことを実行できました。しかし、人々は awk をより好むようです。それで、それを試します。返信ありがとうございます。

4

5 に答える 5

6

Perlとawkが思い浮かびますが、新しい言語を学びたくない場合は、Pythonでもかまいません。

Perlは汎用言語であり、awkはあなたが説明したタイプのテキスト処理をより重視しています。

于 2010-03-15T06:58:37.490 に答える
3

単純なスチーム編集を行う場合、sed はほとんどの *nix ボックスに標準装備されている優れたユーティリティですが、それよりもはるかに複雑なものについては、Perl を使用することをお勧めします。曲線はそれほど悪くなく、通常のテキスト解析のほとんどの形式を記述するのに最適です。優れたリファレンスはこちらにあります

于 2010-03-15T06:48:08.887 に答える
1
#!/usr/bin/env python
# process.py     
import fileinput

for line in fileinput.input(): # you could use `inplace=True` parameter here
    words = line.split() # e.g. split on white spaces
    all_except_last = words[:-1]
    print ' '.join(all_except_last)
    # or
    first_two = words[:2]
    print ' '.join(first_two)

例:

$ echo a b c | python process.py
$ ./process.py input.txt another.txt
于 2010-03-15T07:10:10.260 に答える
1

* etc などの nix ツールawk/grep/tail/head/sedは優れたファイル処理ツールです。ファイル内のパターンを検索して処理する場合は、awk を使用できます。大きなファイルの場合は、grep + awk の組み合わせを使用できます。パターン検索の速度については grep を、テキスト操作の能力については awk を使用します。sedに関しては、多くの場合、sedが行うことはawkですでに実行できるため、ファイル処理にsedを使用するのは冗長だと思います。

ファイルの処理速度に関しては、awk は多くの場合、同等か、Perl や他の言語よりも優れています。

また、ファイルの前後の部分をすばやく取得するための 2 つの非常に優れたツールは、tailheadです。したがって、最後の行を取得するには、を使用できますtail

于 2010-03-15T07:40:19.613 に答える
0

もちろん、最適なツールは実行するタスクによって異なります。sed/awk などの通常の *nix ツールや、他の人が引用するプログラミング言語 (Perl、Python) に加えて、現在、元のデータ形式が厳格な解析規則に従っていないが、わずかに異なる場合があるテキスト処理に必要であることに気づきました。 Vim エディター内で呼び出す Vim マクロと Vimscript 関数と非常によく合います。

このようなもの (Vim の初心者向け): 処理関数を記述します。ファイル script.vim で TxtProcessingToBeDone1() を実行し、:source script.vim でソースを取得してから、編集するファイルを開き、次のようにします。

:call TxtProcessingToBeDone1()

@: および @@ キーを使用して、一度にバッファ全体に対して、またはその場で繰り返されるワンショット操作として。また、:bufdo と :argdo を使用すると、複数のバッファ/ファイルを同時に処理できます。

Vimscript 関数を使用すると、通常の編集セッションで実行するすべてのタスク (パターンの検索、正規表現、置換、移動、削除、ヤンクなど) を繰り返し、自動化し、プログラミング制御フローを適用することができます。 (もし/その時)。

同様の考慮事項は、他の高度なスクリプト可能エディターにも当てはまります。

于 2014-03-08T12:09:00.197 に答える