あなたの問題は、Windowsが(誰もがこれまでのところだと思うように見えたとして)、それはあなたのファイルは末尾に改行(WindowsにCRLFの組み合わせがある)が欠落していることだすべてのLFの前にCRを追加したことではありませんファイルの終わりの改行を持たないファイルに対してUNIXコマンドを実行すると、その時点で真の "テキストファイル"ではないため、すべてのベットはオフになります。ファイルを生成しているツールを変更して改行を終わらせることはできますか?その後、awkのか、その上に他のツールを実行する前に
printf '\r\n' >> file
をしない場合。その後、dos2unix
を実行したり、必要に応じて\r
を処理したり削除したりすることができます。たとえば、次の原因ファイルに不足している改行に最後Helloworld
直後に私のプロンプトです
$ cat -v file
Helloworld^M
how are you^M
Helloworld$
お知らせ$
。今:
$ awk -v BINMODE=3 '!seen[$0]++' file | cat -v
Helloworld^M
how are you^M
Helloworld
$
$ printf '\r\n' >> file
$
$ awk -v BINMODE=3 '!seen[$0]++' file | cat -v
Helloworld^M
how are you^M
$
$ dos2unix file
dos2unix: converting file file to Unix format...
$
$ awk '!seen[$0]++' file | cat -v
Helloworld
how are you
$
私はgawkのスクリプトがそれらを見る前\r
のストリッピングから低レベルのプリミティブを停止するには、上記cygwinの上でのgawkで-v BINDMODE=3
を使用する必要があります。
あなたのdodorstepに表示されるすべてのファイルに対してdos2unixを実行するだけの理由はありません。あなたはawkが正しく各行は3つのフィールドを持っていることを認識し、フィールド2であるのに対し、そのフィールド3は、1行目に空で見ることができるように
$ printf 'a\rb\r\nd\r\rf\n' > file
$ cat -v file
a^Mb^M
d^M^Mf
$ awk -v BINMODE=3 -F'\r' '{for (i=1;i<=NF;i++) print NF, i, "<"$i">"; print "----"}' file
3 1 <a>
3 2 <b>
3 3 <>
----
3 1 <d>
3 2 <>
3 3 <f>
----
:フィールドの区切り文字としてキャリッジリターン(コントロール-MS)を使用してこのファイルを想像してみて2行目が空です。あなたは、それが\r\n
を見たとき、それはそれだったドスラインエンディングを想定しているためdos2unix
は、1行目から空のフィールド3を剥離することで、ファイルを破損していない見ることができるように
$ dos2unix file
dos2unix: converting file file to Unix format...
$ cat -v file
a^Mb
d^M^Mf
$ awk -v BINMODE=3 -F'\r' '{for (i=1;i<=NF;i++) print NF, i, "<"$i">"; print "----"}' file
2 1 <a>
2 2 <b>
----
3 1 <d>
3 2 <>
3 3 <f>
----
を:それでは、それにDOS2UNIX実行して、もう一度試してみましょうFSの後にRSが続きます。
@WalterAこれは、各行の末尾だけでなく、ファイル全体から '\ r'sを削除します。そして、余分な' \ r'sはOPsの問題ではないので、問題は改行がありません(CRLF彼のケースでは)ファイルの最後に。 –