単純なブール情報検索システムのテストを高速化しています。awk、grep、egrep、sed、または事物と類似のパイプを使用して、テキストファイルを単語に分割し、行ごとにWordを使用して他のファイルに保存します。私のファイルコートの例:
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
...
感謝!
Trの使用:
tr -s '[[:punct:][:space:]]' '\n' < file
最も簡単なツールはfmtです。
fmt -1 <your-file
指定された幅に合わせて改行するように設計されたfmtと、-1
単語の直後に壊れます。見る man fmt
ドキュメント。インスピレーション http://everythingsysadmin.com/2012/09/unorthodoxunix.html
sed
の使用:
$ sed -e 's/[[:punct:]]*//g;s/[[:space:]]\+/\n/g' < inputfile
基本的に、これはすべての句読点を削除し、スペースを改行で置き換えます。これはまた、sed
の味が\n
を理解していることを前提としています。一部ではサポートしていません-その場合、代わりにリテラルの改行を使用できます(つまり、引用符の中に埋め込むことによって)。
grep -o
は、パターンに一致する一致行の部分のみを出力します
grep -o '[[:alpha:]]*' file
cat input.txt | tr -d ",." | tr " \t" "\n" | grep -e "^$" -v
tr -d "、。" 「、」、「。」を削除します
tr "\ t" "\ n"はスペースとタブを改行に変更します
grep -e "^ $" -vは、空の行を削除します(2つ以上のスペースの場合)
これまでの回答に基づいて、おそらくあなたが探しているのは、単語をスペース、コンマ、文末文字(つまり、英語では「。」「!」または「?」)で区切られた文字のシーケンスとして扱うことだと思います英数字と組み合わせて通常は見つけることができない文字(「<」や「;」ではなく'
-
#
$
%
)。さて、「。」は文末文字ですが、$27.00
は「単語」と見なす必要があるため、.
はコンテキストに応じて異なる方法で処理する必要があります。同じことがおそらく「-」や他のいくつかの文字にも当てはまると思います。
したがって、これを変換するソリューションが必要です。
I have $27.00. We're 20% under-budget, right? This is #2 - mail me at "[email protected]".
これに:
I
have
$27.00
We're
20%
under-budget
right
This
is
#2
mail
me
at
[email protected]
あれは正しいですか?
GNU awkを使用してこれを試して、RSを複数の文字に設定できるようにします。
$ cat file
I have $27.00. We're 20% under-budget, right? This is #2 - mail me at "[email protected]".
$ 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
[email protected]
他のいくつかのテストケースを考えて、これが常に期待どおりに機能するかどうかを確認してください。
このawk行も機能する可能性がありますか?
awk 'BEGIN{FS="[[:punct:] ]*";OFS="\n"}{$1=$1}1' inputfile
Perl の使用:
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
Perl -ne 'print join( "\ n"、split)'
申し訳ありませんが@jsageryd
その1つのライナーは、最後のWordを次の最初のWordと結合するため、正しい答えを与えません。
これはより良いですが、srcの空白行ごとに空白行を生成します。パイプ経由| sed '/ ^ $/d'それを修正する
Perl -ne '{print join( "\ n"、split(/ [[:^ Word:]] + /))、 "\ n"; } '
非常に簡単なオプションは最初に、
sed 's,\(\w*\),\1\n,g' file
アポストロフィも句読点も処理しないことに注意してください
Perl
の使用:
Perl -ne 'print join("\n", split)' < file