Cygwin の cat コマンドでハマった事

今年の春に、ある社内ツールをシェルスクリプトと awk で書きました。その時、Cygwin の cat コマンドでちょっとハマった事を思い出したので書いておきます。

[bash]

Debian にて 3 つの改行を含むテキストファイルを作成

この時、a.txtの改行コードはLF。

dyama@debian:~$ cat > a.txt

^D

nkf で改行コードを CRLF にして b.txt を作成。

dyama@debian:~$ nkf -Lw a.txt > b.txt

もちろん、cat で吐いた文字数は異なる。

dyama@debian:~$ cat a.txt | wc -c
3
dyama@debian:~$ cat b.txt | wc -c
6
[/bash]

この a.txt と b.txt を Windows の Cygwin 環境に持ってきます。(もちろん、自動的に改行コード変換がかかるFTPソフトなどは経由せずに)

[bash]

同じく cat で吐いた文字数を調べようとすると

$ cat a.txt | wc -c
3
$ cat b.txt | wc -c
3

えっ

$ ls -l a.txt b.txt # ファイルサイズを調べる
-rw-r–r– 1 dyama hogehoge 3 Sep 24 17:44 a.txt
-rw-r–r– 1 dyama hogehoge 6 Sep 24 17:44 b.txt

なにこれこわい

[/bash]

Cygwin のセットアップ時に、改行コードを DOSのCR+LFにするか、UNIXのLFのみにするかを選択する事が出来ますが、どうも Cygwin に添付されている cat コマンドだけは、是が非でも CRLF を改行コードとして入出力するらしいです。LF改行なシェルスクリプトの中で cat コマンドを使って、ファイル出力などをやっていたので、見事につまづきました。
さらに、出力したファイルを awk で行パターンマッチさせようとして、全然動いてくれなくて数日悩みました。ほんと、明記しておいて欲しいなあ。
ちなみに、件についてしっかりと書いてあるのは、本日現在、このページくらいでした。ココがなければずっと迷っていたと思います。多謝。

コメントを残す

メールアドレスが公開されることはありません。