2016-03-29 5 views
1

AWKを使用して、テキストファイル内のすべての単語を改行します。私は実際にAWKの使い方を知らないが、私の問題を解決するはずのオンラインコマンドをいくつか見つけた。これらのコマンドの両方が、すべてのスペースが削除されていることである同じ効果を持っている、しかしAWKを使用して各単語をテキストファイルに新規行に配置

$ awk '{ for (i = 1; i <= NF; i++) print $i }' input.txt > output.txt 

$ awk '{c=split($0, s); for(n=1; n<=c; ++n) print s[n] }' input.txt > output.txt 

:私は、次のコマンドを試してみました。

The fox jumped over the dog 

output.txtとが含まれている必要があります:

The 
fox 
jumped 
over 
the 
dog 

しかしoutput.txtとが含まれています

Thefoxjumpedoverthedog 

明確にするために

は、そのINPUT.TXTがテキストを含んでいると言うことができます私はこれらのコマンドを使用するWindows 7でCygwinを使用しています。私はコマンドの中に欠けているものがありますか?ファイルからawk ... inputfile

を読むため

+0

標準awkのプラットフォームでは再現できないのです。あなたのAwkがUnixの行末を出力し、あなたがファイルを調べるために使用しているツールがそれらと何をするべきか分からないことがありますか? Awkのスクリプトは問題ありません。プラットフォーム上で正しく動作させる方法はここにありますが、それはプログラミング上の問題ではありません。 – tripleee

+0

@ tripleeeありがとう、私はそれがWin/Unixシステム間の互換性と関係があると思った。 – hjalpmig

+0

ああ、WindowsとUnixとの互換性がある。 'cat -vet file'を試してみてください。行末に '^ M $'がある場合は、 'dos2unix file'を使ってunix形式に変換してください。 (あるいは、私があなたのデータの "方向"を誤解すれば、 'unix2dos file'もあります。 – shellter

答えて

2

manページによると、awkではprintは引数を出力します。

は、現在の出力フィールドセパレータで分離され、出力レコードセパレータ

によって終了だからあなたの最初のコマンドはokです、出力レコードセパレータが新しい行であることを確認する必要があります。デフォルトの出力レコードセパレータは改行ですが、確認してみてください。Cygwinのオン

awk -v ORS='\n' '{ for (i = 1; i <= NF; i++) print $i }' input.txt > output.txt 

だけは、Windows/DOSの行末の問題に実行している可能性があります。またORS='\r\n'を試してください。あるいは、出力をunix2dosにパイプします。

+0

これは私にも同じエラー出力を与えます – hjalpmig

+0

これはunix2dosのような問題の場合に' '\ r \ n' 'で試すことができますか? – szym

+0

'\ r \ n'を追加すると解決しました。ありがとうございます。 – hjalpmig

2

別の代替

echo "the fox jumped over the dog" | awk -v OFS="\n" '{$1=$1}1' 

しかし、私はそれはあなたのケースを解決するかわかりません。あなたawkが壊れている場合は、tr

echo ... | tr ' ' '\n' 

を試すことができ行います。

+0

あなたの最初のコマンドは私のために働く。テキストを入力する代わりにファイルから読み込み、出力を別のファイルに保存するように変更するにはどうすればよいですか? – hjalpmig

+0

通常と同じように 'awk ... inputfile> outputfile' – karakfa

0

あなたはPerlで自明これを行うことができます:awkでは

$ echo "The fox jumped over the dog" | perl -ple 's/\h/\n/g' 
The 
fox 
jumped 
over 
the 
dog 

同じ作品:

$ echo "The fox jumped over the dog" | awk '{gsub(/ /,"\n"); print}' 
The 
fox 
jumped 
over 
the 
dog 
関連する問題