SASでリスト出力したテキストファイルに対して、grepコマンドを実行し「バイナリー・ファイル(標準入力)は一致しました」と出力される原因と解決方法
SASの話というよりは、Linux の grepコマンドの話。
SASでリスト出力したテキストファイル(.lst) に対して、grepコマンドを実行すると、「バイナリー・ファイル(標準入力)は一致しました」と出力されて、実行が終了されてしまう問題が発生しました。一部のリストファイルはきちんとgrepコマンドが実行されるのですが、理由が分からず右往左往してしまいました。
どうやら、grepコマンドは、バイナリファイルと思われるコードがあると、正常に動作してくれなくなるらしい(余計なことを…)。なので、明示的にテキストファイルと認識させるために、以下の3つのいずれかのオプションを付ける必要があります。
- -a
- --text
- --binary-files=text
これにより、テキストファイルと認識されるため、正常にgrepコマンドが実行されます。
そもそも、なぜリストファイルがバイナリファイルと認識されてしまったのか。これは、複数回リスト出力したときに発生します。
data TEST ; A = 1 ; run ; title "TEST 1" ; proc print data=TEST ; run ; title "TEST 2" ; proc print data=TEST ; run ;
リストをテキスト出力したとき、人間の目には見えませんが、表と表の間に制御コード 0x0c(改ページ)が出力されています。この制御コードが、grepコマンドにリストファイルをバイナリファイルと思わせた原因でした。
参考サイト
2015/05/18 追記:ページ区切りに使われている改ページを変更する方法を発見しました!
コメント
コメントを投稿