dos2unixで改行コードの変換


アニメ『みつどもえ』(2010)
動画は、ドラマCDのPVです。まったく似てない三つ子三姉妹のギャクアニメ。引いてしまうところもあるのですが、慣れかなあと思います。
みつどもえで連想するのが、Linux/Mac/Windows。LinuxはUNIXライクなOS、一方でMacは完全なUNIX。Windowsも10でbashを取り込む等、良いものを取り込んで発展し、OSの仕組みはよく知りませんが、それぞれすごく優れたシステムになっていくのでしょうか。この先、良いものを取り込み続けたら、全部似たようなOSになっていってしまうのかもしれませんが、それぞれでずっと変わらないものもあるでしょう。テキストファイルの改行コードはその一つですね。LinuxはUNIXと同じく、改行コードはLF(0x0A)、WindowsはCRLF(0x0D,0x0A)、MacはUNIXではありますが、CR(0x0D)。
最近は、ファイルの転送時に改行コードの変換をしてくれることが多いので、使うことが少ないですが、Windowsのテキストファイルを、Linux用に変換するコマンドを使うことがありました。

今回は、改行コードの変換コマンドdos2unixを使います。
まずはインストール。

takk@deb9:~$ sudo apt-get install dos2unix

Linuxでこのようなテキストを作成。

takk@deb9:~$ cat linux.txt
abcdefg
hijklmn
opqrstu
takk@deb9:~$

次に、同じ内容のテキストをWindowsで作成し、Linuxにもってきます。ファイル名はwin.txtとします。
両者をls表示して比較してみましょう。

takk@deb9:~$ ls -l win.txt linux.txt
-rw-r--r-- 1 takk takk 24  2月 18 17:02 linux.txt
-rw-r--r-- 1 takk takk 27  2月 18 17:02 win.txt
takk@deb9:~$

改行コードが異なるので、ファイルサイズも違いますね。3行のテキストファイルなので、3BYTE差があります。

odでのダンプでも比較してみましょう。

takk@deb9:~$ od -tx1a -An win.txt
  61  62  63  64  65  66  67  0d  0a  68  69  6a  6b  6c  6d  6e
   a   b   c   d   e   f   g  cr  nl   h   i   j   k   l   m   n
  0d  0a  6f  70  71  72  73  74  75  0d  0a
  cr  nl   o   p   q   r   s   t   u  cr  nl
takk@deb9:~$ od -tx1a -An linux.txt
  61  62  63  64  65  66  67  0a  68  69  6a  6b  6c  6d  6e  0a
   a   b   c   d   e   f   g  nl   h   i   j   k   l   m   n  nl
  6f  70  71  72  73  74  75  0a
   o   p   q   r   s   t   u  nl
takk@deb9:~$

ではWindowsの改行コードをlinux用に変換します。
dos2unixコマンドは、破壊的置換。つまりファイルをそのまま変換してしまうので、テンポラリファイルを作成し、そちらを変換するようにします。

takk@deb9:~$ cp win.txt tmp.txt
takk@deb9:~$ dos2unix tmp.txt
dos2unix: ファイル tmp.txt を Unix 形式へ変換しています。
takk@deb9:~$ cmp tmp.txt linux.txt
takk@deb9:~$

変換後のWindowsのテキストが、Linuxのテキストと一致しました。
念のためサイズも見てみます。

takk@deb9:~$ ls -l *.txt
-rw-r--r-- 1 takk takk 24  2月 18 17:02 linux.txt
-rw-r--r-- 1 takk takk 24  2月 18 17:07 tmp.txt
-rw-r--r-- 1 takk takk 27  2月 18 17:02 win.txt
takk@deb9:~$

サイズも24で一致してますね。
今度は、LinuxのテキストをWindowsの改行コードに変換します。同じようにtmp.txtを使います。

takk@deb9:~$ cp linux.txt tmp.txt
takk@deb9:~$ unix2dos tmp.txt
unix2dos: ファイル tmp.txt を DOS 形式へ変換しています。
takk@deb9:~$ cmp tmp.txt win.txt
takk@deb9:~$ ls -l *.txt
-rw-r--r-- 1 takk takk 24  2月 18 17:02 linux.txt
-rw-r--r-- 1 takk takk 27  2月 18 17:10 tmp.txt
-rw-r--r-- 1 takk takk 27  2月 18 17:02 win.txt
takk@deb9:~$

こちらも一致しました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA