アメリエフの技術ブログ

Amelieff Staff Blog

macとlinuxのcatで不可視文字の確認

在宅勤務が続くkubo-mです。
自宅をいかに快適な仕事場にするか、試行錯誤が続いております。

バイオインフォマティクス業界では基本的にLinuxで作業をすることが多いですが、ごくたまにはmacやWindowsのコマンドラインで作業する必要もあります。
さすがにもう、Linuxのコマンドはどんとこい、なのですが、WindowsのPowerShellとやらとは全然仲良くなれません。
一方でmacOSのほうはそもそもの成り立ちもあり、Linuxのコマンドとよく似ており、私でも割と気軽にコマンドライン操作を行うことが可能です。

よく似ているのですが、ちょっとしたコマンドがなかったり、オプションが違ったりします。
その例を挙げていくと膨大になるのでいちいち例を上げませんが、先日、catコマンドを使って不可視文字を確認するときに戸惑ったので紹介記事を書いてみます。

改行、タブなどの不可視文字の確認方法についてはずいぶん前にも記事を書いています。
改行コードを確認 - アメリエフの技術ブログ

この記事ではod -cによる確認方法を紹介していますが、catコマンドでも不可視文字が確認できます。
catは指定したファイルを連結(concatenate)するためのコマンドです。オプションを指定せずに実行すると、指定したファイルの内容すべてを、画面(標準出力)に表示します。

ここで、自分で作成したのではなく、誰かから受け取った遺伝子リストがあるとします。

cat genelist.txt
Gene ID  Gene symbol
ENSG00000136997 MYC
ENSG00000117020 AKT3
ENSG00000146648     EGFR

こんなファイルを見たとき、経験的に

  • Windows改行コードが混ざっていないか確認したい。
  • Gene ID Gene symbolというヘッダは4単語に見えるが、Gene ID Gene symbolはスペースが含まれる1単語で、ID Geneの間は区切り文字のタブだと思うので確認したい。

と考えます。

Linuxでcat

このように「改行コード」「タブ」「スペース」といった不可視文字をLinuxのcatコマンドで確認するには-Aオプションを付けて実行します。

cat -A genelist.txt
Gene ID^IGene symbol$
ENSG00000136997^IMYC$
ENSG00000117020^IAKT3$
ENSG00000146648^IEGFR$

この場合タブが^I、改行コードが$で表示されています。
$ で表示された改行コードはLinuxやmacOSで使用される改行コードLine feed(LF)です。
そのほかも含め、改行コードとcat -Aでの表示は以下の通りです。

  • $ ... LF (Linux、macOSで使用される改行コード)
  • ^M$ ... CRLF(Windowsで使用される改行コード)
  • ^M ... CR (1回だけ見たことがある、古いバージョンのmacのエクセルで作成したTSVで使われていた改行コード)

ちなみにman catで調べた詳しいことを言うと、-A-vET-v -E -Tをまとめて指定)に相当し、これらのオプションはそれぞれ

  • -v 不可視文字を^, -Mで表示する
  • -E 行末の改行コードを表示
  • -T タブを^I で表示する

を意味するそうです。

macOSでcat

macOSでも同様に不可視文字を表示させようと思ったら、cat-Aがありませんでした。
macOSのcat不可視文字を確認するときは-eを使ってください。

cat -e genelist.txt

さて、不可視文字、そのなかでも改行コードを確認する理由ですが、Linux上で動くツールはWindowsの改行コードをうまく処理できず、ファイルにWindows改行コードが含まれているとエラーが起きることがあるためです。
Windows改行コードだ! と気づいたときの、Linux改行コードへの置換方法はこちらの記事をご覧ください。
どんな改行コードでも・前 - アメリエフの技術ブログ

以上、過去記事の宣伝でした!