在宅勤務が続く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改行コードへの置換方法はこちらの記事をご覧ください。
どんな改行コードでも・前 - アメリエフの技術ブログ
以上、過去記事の宣伝でした!