ファイルの最終行が空行かどうかを確認する

シェルスクリプトで、「while read」を使ってファイルを読み込んで1行づつ処理する事があると思います。
先日、あるファイルを読み込んでする処理があり、そのファイルが一部訂正する必要がありWindowsで修正しました。その際にファイルの最終行が空行となっていたので削除しました。

その後、「while read」を使ってファイルを読み込んで処理すると、最後の1行が処理されていませんでした。
いつもなら、vimでファイルを編集しているのですが、今回はWindowsで編集して最終行の空行が原因で最終行が処理されませんでした
while read」では、 最終行に改行文字が付いていないと、最終行が処理されません

vi では、最終行が空行じゃなくても、自動で空行が挿入されるので、最後の1行が空行でなくても大丈夫でした

 

下記のファイルでは、test1.txtが最終行の空行を削除して、viで保存したファイルです。
test2.txt はWindowsのテキストエディタで空行を削除したファイルです。cat -e [ファイル名]で改行コードを表示して出力しています

# 最終行に空行が入っているファイル
[admin@www1]$ cat -e test1.txt 
1 TOYOTA$
2 NISSAN$
3 HONDA$

# 最終行に空行が入っていないファイルの場合は、最終行の後に改行コードが表示されません
$ cat -e test2.txt 
1 TOYOTA$
2 NISSAN$
3 HONDA

下記では、tailコマンドを最終行のみ表示して、その行数をwcコマンドでカウントしています。
空行がない場合は、改行コードがないので「0」。改行コードがある場合は「1」と表示されます

# tailコマンドで最終行のみ出力して、その行をwcコマンドでカウントします
# 改行コードがあるので「1」と出力されます
[admin@www1]$ tail -1 test1.txt | wc -l
1

# 最終行の空行を削除していて、改行コードがないので「0」と出力されます 
[admin@www1]$ tail -1 test2.txt | wc -l
0

 

スポンサーリンク

0
0