28

ナイーブなブール情報取得システムのテストを高速化しています。テキストファイルを単語に分割し、1行あたりの単語数で他のファイルに保存するために、awk、grep、egrep、sed、または類似したものとパイプを使用したいと思います。 。私のファイルに含まれる例:

Hola mundo, hablo español y no sé si escribí bien la
pregunta, ojalá me puedan entender y ayudar
Adiós.

出力ファイルには次のものが含まれている必要があります。

Hola
mundo
hablo
español
...

感謝!

4

11 に答える 11

55

tr の使用:

tr -s '[[:punct:][:space:]]' '\n' < file
于 2013-03-19T14:13:10.230 に答える
4

使用sed:

$ sed -e 's/[[:punct:]]*//g;s/[[:space:]]\+/\n/g' < inputfile

基本的に、これはすべての句読点を削除し、スペースを改行に置き換えます。これはまた、あなたのフレーバーがsedunderstandsであることを前提としています\n。そうでないものもあります -- その場合、代わりにリテラル改行を使用できます (つまり、引用符内に埋め込むことによって)。

于 2013-03-19T14:06:56.007 に答える
3

grep -oパターンに一致する一致する行の部分のみを印刷します

grep -o '[[:alpha:]]*' file
于 2013-03-19T14:19:26.467 に答える
1

これまでの回答に基づいて、おそらくあなたが探しているのは、単語をスペース、コンマ、文末文字(英語では「。」「!」または「?」で区切られた文字のシーケンス)などとして扱うことだと思います。英数字との組み合わせでは通常見られない文字(例:「<」および「;」ですが、そうではありません' - # $ %)。今、 "。" は文末の文字ですが、$27.00これは「単語」と見なす.必要があるため、文脈に応じて異なる方法で処理する必要があるとおっしゃいました。「-」や他の文字についても同じことが言えると思います。

したがって、これを変換するソリューションが必要です。

I have $27.00. We're 20% under-budget, right? This is #2 - mail me at "foo@bar.com".

これに:

I
have
$27.00
We're
20%
under-budget
right
This
is
#2
mail
me
at 
foo@bar.com

あれは正しいですか?

GNU awkを使用してこれを試して、RSを複数の文字に設定できるようにします。

$ cat file
I have $27.00. We're 20% under-budget, right? This is #2 - mail me at "foo@bar.com".

$ gawk -v RS="[[:space:]?!]+" '{gsub(/^[^[:alnum:]$#]+|[^[:alnum:]%]+$/,"")} $0!=""' file
I
have
$27.00
We're
20%
under-budget
right
This
is
#2
mail
me
at
foo@bar.com

他のいくつかのテストケースを考え出して、これが常に希望どおりに機能するかどうかを確認してください。

于 2013-03-19T16:56:05.633 に答える
1
cat input.txt | tr -d ",." | tr " \t" "\n" | grep -e "^$" -v

tr -d ",."削除,して.

tr " \t" "\n"スペースとタブを改行に変更します

grep -e "^$" -v空行を削除します (2 つ以上のスペースの場合)

于 2013-03-19T14:12:07.260 に答える
1

使用perl:

perl -ne 'print join("\n", split)' < file

于 2013-03-19T14:07:38.897 に答える
1

このawk行も機能する可能性がありますか?

awk 'BEGIN{FS="[[:punct:] ]*";OFS="\n"}{$1=$1}1'  inputfile
于 2013-03-19T14:16:23.343 に答える
0

非常に単純なオプションは、まず、

sed 's,\(\w*\),\1\n,g' file

アポストロフィも句読点も処理しないことに注意してください

于 2013-03-19T14:07:07.517 に答える
0

使用:

perl -pe 's/(?:\p{Punct}|\s+)+/\n/g' file

出力

Hola
mundo
hablo
español
y
no
sé
si
escribí
bien
la
pregunta
ojal�
me
puedan
entender
y
ayudar
Adiós
于 2013-03-19T14:13:40.500 に答える