2006年05月28日
川俣晶の縁側ソフトウェアその他開発日誌total 3585 count

NT版UNIX-like toolsのtail, wcが行末で終わらないファイルの最後の行をカウントしない問題

Written By: 川俣 晶連絡先

 NT版UNIX-like toolsのtail, wcは、最後の行が改行で終わっていない場合、最後の行を1行としてカウントしません。

 この動作は、UNIXの同名のコマンドの動作に合わせたもので、仕様です。

 従って、この動作を変更することはありません。

回避方法 (2006年5月29日差し替え、OOTANI TAKASHIさんに感謝) §

 (Windows付属の)moreを使うと全ての行に改行を付けることができます。

 wcは単純にmoreを前段に付けるだけで回避できます。

 たとえば、以下のようなコマンドを使うと、ファイルbad.txtの全ての行に改行が強制的に付加され、最後の行も1行としてカウントされます。

more <bad.txt|wc

 何らかのコマンドの入力を受け取るなら以下のように使います。

コマンド|more|wc

 ちなみに、moreはファイルやパイプを出力対象としたとき、入力待ちになることはありません。

 tailは残念ながらこの方法では回避できません。たとえば、以下のような方法で一時ファイルに書き出し、それを対象に処理する方が良さそうです。(tailは後ろからテキストを調べる関係上、ランダムアクセスできる対象=つまりファイルを相手に実行する方が良い)

more <bad.txt >tempfile.$$$

tail tempfile.$$$

del tempfile.$$$

説明 §

 このことは、原作者の作成したtailのドキュメントに以下のように記載されています。

最後が改行で終わっていないファイルに対し「tail -行数 ファイル名」

を実行すると、最後の行が行数に数えられないため、出力が指定より1行

多くなる。これは、UNIXのtailに合わせてわざとそうしてある。

 wcに関しては、ドキュメントに明示されていませんが、FreeBSDのwcが同様に最後の行をカウントしないことを確認しました。

 ちなみにFreeBSDを使ったのは、基本コマンドについて、より強力な別ツールへの置き換えがあまり行われていないだろう……という(あまり根拠のない)判断によるものです。

Facebook

キーワード【 川俣晶の縁側ソフトウェアその他開発日誌
【その他開発日誌】の次のコンテンツ
2006年
05月
28日
NT版UNIX-like toolsのcpでディレクトリのタイムスタンプがコピーされない問題
3days 0 count
total 2722 count
【その他開発日誌】の前のコンテンツ
2006年
05月
08日
azip: J#ライブラリによる.zipファイル圧縮展開簡易ツール Version 0.3
3days 0 count
total 2544 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20060528192037
サイトの表紙【その他開発日誌】の表紙【その他開発日誌】のコンテンツ全リスト 【その他開発日誌】の入手全リスト 【その他開発日誌】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.