• ベストアンサー

テキストファイルから最終行の抽出

テキストファイルに出力された内容のうち、 最終行のみ抽出し、他のテキストファイルに 落とし込みたいと考えています。 DOSコマンドを使用して実現したいと思うのですが 良い方法などございましたら、ご教授ください。 宜しくお願い致します。 ※OSはWindows Server 2003を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#9381
noname#9381
回答No.3

98SEから2003までのすべてのWindowsに標準搭載されているコマンドでFORと>(リダイレクト)を使って出来ます。 FOR /F "TOKENS=1*" %A IN ([元ネタファイル名]) DO ECHO %A > [出力先ファイル名]  (大カッコ([ ])は必要ありませんが、普通のカッコ( () ) は必要です。)  元ネタのファイルサイズが大きかったら少々思い処理になるかもしれませんが、所詮テキストファイルですので、極端に時間がかかるものでもないでしょう。  なお、元ネタのファイルはSVS形式などのファイルだと思いますが、そうだとするとフィールドの区切り文字をそのデータ内に含まれないものにするといいですね。FORのなかに" "で囲まれた部分がありますが、そこに 「delims=...」などとデータ内に無い文字列を指定します。"TOKENS=1* delims=..."というようにTOKENSとはスペース区切りで追加します。 (今回、元ネタのデータがどういうものか分からないのではっきりとした答えを書きようがありません。データの形式によっては例外処理対応をする必要もあります。  バッチで組むならもっと軽くする方法はありますね。なお、その際、FORの内部変数を%%Aとする必要がありますので気をつけましょう。今回はコマンドラインでということですので、コマンドライン1行で出来るものとしています。

wirednabi
質問者

お礼

lar様: 補足まで頂きまして有難うございます。 for文により最終行の抽出できました! この構文で最終行のみ抜き出せる理由が まだ理解できていませんが、勉強させて頂きます。 御世話をお掛け致しました。

その他の回答 (3)

noname#9381
noname#9381
回答No.4

すみません。訂正をいくつか。 SVS→CSV コマンドラインでと→コマンドで でしたね。これがコマンドラインからなのかバッチスクリプトで処理していいのか判断が出てきますね。  私が、先の回答であげていたのは、その元ネタファイルを1行ずつファイルに上書きでリダイレクトすれば最後の行を書き込んだ時点で最後の行が残るということになります。  WindowsのコマンドではUNIXと違い、テキスト処理ができるものがあまり揃ってないのでしばしばこう言う裏技的な処理が必要になってきますね。まさにパズル状態です。  もし、その時々の処理の「最後の行」をログファイルのように管理したいのでしたら、この後にそのファイルから別のファイルに>>で追記リダイレクトするといいでしょう。  また、ファイルに1行1行書き込むよりも変数に上書きで叩き込み、最後にその変数をファイルに書き出すと処理は幾分早いでしょうね。  やり方はいろいろあると思います。もっと良い解もあると思いますので、研究されてはいかがでしょうか?

noname#86752
noname#86752
回答No.2

DOSコマンドでそれを実現する機能は標準では付いてないようです。 unix系ではtailというプログラムがあって、それをdosに移植したものがありますので、使ってみてください。 参考URLにあるものをWinXP Proで使ってみましたが、できました。 リダイレクトについては大丈夫ですか? 念のために表示結果をファイルに書きたいときは >tail.exe inputfile > outputfil というように、コマンドの後に > と 出力先のファイル名を指定すれば、できます。 追記したいなら > ではなく >> で、後ろに追加されます。

参考URL:
http://www.vector.co.jp/soft/dos/util/se007619.html?site%3Dn
wirednabi
質問者

お礼

crum様: 有難うございます。 早速試してみます。 >unix系ではtailというプログラムがあって、それをdosに移植したものがありますので、使ってみてください。 こういうソフトがあるんですね(^^" また結果報告をさせて頂きます。

  • mendokusa
  • ベストアンサー率13% (359/2726)
回答No.1

unix系だとtailと言うコマンドがあります。MD-DOS用は探してみて下さい。

wirednabi
質問者

お礼

mendokusa様: 上にご紹介頂きましたソフトで一度検証してみます。 有難うございますm(_ _)m

関連するQ&A

  • テキストファイルの最終行を削除したいのですが

    初めまして。 batかVBSのプログラムで、テキストファイルを開いて最終行のみを削除したいのですが、どうしても実現が出来ません。 もし分かる方がおられましたら、是非ともご教授をお願い致します。

  • テキストファイルからの抽出

    VBAでもコマンドプロンプトでもいいのですが、1000行くらいあるテキストファイルを読み込んで、キーワード「タイムアウト」を含む行の1つ手前の行の文字列を抽出、それらを1つのファイルにまとめて出力させたいのです。 VBAで自分なりにやってみたのが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142881517 の最後の回答にあるマクロに手を少し加えて「タイムアウト」のある行番号をテキストファイルに出力し、その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。 ですが、どうやってそのリストから行番号を指定して、元のファイルからタイムアウトを含む行の1つ手前の行を抽出し、1つのファイルにまとめて出力させられるのかが分かりません。 後Powershellはまだ勉強途中なのですが、こっちでならできますか? アドバイスをお願いします。

  • 複数のテキストファイルからの行抽出

    40KByteのテキストファイルが300ファイルあります。 aaa bbb ccc と複数の検索条件を含む行を抽出したいと思っています。 ファイル数も多いので極力自動で処理を行いたいです。 環境は、できればフリーソフトよりは windows、linuxのコマンドかoffice等のソフトを使用したいです。 良い方法があれば教えてください。

  • テキストファイルの行抽出

    linux環境のプログラムについて質問です。 ある特定のファイル(テキストファイル)内のデータで 指定の行を抽出する方法を教えていただきたいと思います。 現在はawkを使用してbashスクリプト内で下記のように head, tailを使用していますが、処理が重いように 感じます。perlまたはawkなどで行抽出の軽い処理は できないでしょうか? (他のunixコマンドでも結構です。) ---------------------------------------- RNUM=`awk 'END{print NR}' $1` #行番号取得 for iwl in `seq 1 $RNUM`;do BASE=`head -n $iwl $1 | tail -n 1` done #iwl ---------------------------------------- Fortran, Cなども使えますが、色々組み合わせて使う上で bash内のスクリプトで行ないたいと思います。

  • windows2000のDOSコマンドでテキストファイル形式のファイル

    windows2000のDOSコマンドでテキストファイル形式のファイルの記載内容を変更したいです。 Windows2000のDOSコマンドの問合せです。 日付がパラメータとしてセットされているテキストファイル(datepra.txt)があります。 このテキストファイルのパラメータとしてセットされている日付は、データベースの抽出条件としてfrom、toの2つの日付を指定おり、30行目と31行目に記載されてます。 この日付は今まで手動で毎月更新してたんですが、毎日更新したいと思います。 パラメータのfromは今日(毎日更新)、toは今日から1週間後の日付をバッチファイル(.bat)を作成し、日付を取得して、パラメータとしてセットされている30行目と31行目の日付を更新する方法をご教授いただきたく思います。 datepra.txt 中略 # 30行目 db_fromDate=2010/03/19 db_toDate=2010/03/16 中略 # 30行目までは、いろんなパラメータがセットされております。

  • 二つのテキストファイルを行単位で交互に一つに

    10000行のテキストファイルが二つあります。 二つのテキストファイルの内容を行単位で交互に結合させて一つのテキストファイルにまとめたいのですが 例えると下記のようにしたいです。 二つのテキストファイルA.txtとB.txtがあるとします。 ---------------------------------------------- A.txt ああああああああああああああ ささささささささささささささささ ななななななななななななななな ------------------------------------------------ ------------------------------------------------ B.txt かかかかかかかかかかかかかか たたたたたたたたたたたたたた はははははははははははははは ----------------------------------------------- A.txtとB.txtの内容を行単位で交互に一つのテキストファイルとしてC.txtのように保存したいです。 ----------------------------------------------- C.txt ああああああああああああああ かかかかかかかかかかかかかか ささささささささささささささささ たたたたたたたたたたたたたた ななななななななななななななな はははははははははははははは ---------------------------------------------- 検索して調べてみたのですが Pasteコマンドで実現させる方法を試してみたのですが うまくいかず、もしかしたらWindowsにもともと備わっていない機能なのではないかと思い検索したらbusybox64.exeを ダウンロードしてインストールしようと思いましたが コマンドプロンプトにbusybox64.exe --installを 入力してみますとうまく生きました。 busyboxを使わずに行単位で交互にテキストファイルを結合させる方法も知りたいです。 よろしくお願い致します。 返答をお待ちしております。

  • テキストファイルの最終行を消すには。

    C#を使っていますが、だいたい同じだと 思いますのでVBで質問します。 テキストファイルの最終行を 消したいのですが、いい方法は、 ないでしょうか。 (指定行を消す方法でも) お願いします。

  • テキストファイルでの更に細かい抽出

    おはようございます。前回、以下の質問をいたしました。その時は大変お世話になりました。 「テキストファイルに一行ずつ、バラバラの個人情報が入っているのですが (例:千葉県・東京都・茨城県・千葉県・群馬県・千葉県など) それを特定の一つだけを残したいのです。 (例:千葉県・千葉県・千葉県) その抽出方法を教えていただけませんでしょうか?」 この問題は皆さんの回答により、解決することができました。今回はこれより更に細かいものの抽出対象をしたいのです。 千葉県で抽出をすると、必要のない市まで抽出対象ででてきます。 それをコマンドプロンプトで千葉県を抽出する時に、必要のない特定の市を消す・または抜かすことはできますでしょうか? コマンドプロンプトで抽出した場合、テキストファイルの一行目と二行目の間に勝手に、 「□□□.TEXT」←抽出する前のファイル名 が作られてしまいます。 これをいちいち消すのが面倒くさいのです。 さらにその後開いて名前を付けて保存しなくてはならないのですが、デスクトップに「2005.06.11.dat」というように日付をダットファイルで保存できますでしょうか? 以上です。説明が下手で分かりにくいと思いますので、その都度、補足していきます。どうぞよろしくお願いいたします。

  • ファイルから1行または複数行を標準出力する方法

    ものすごく簡単な問題のような気がしますが,わかりません. コマンドで,テキストファイルから1行または複数行を標準出力する方法はありませんでしょうか? 例えば,foo.txt の10行目を出力 > line 10 foo.txt あるいは,複数のコマンドをパイプをかませて実現する方法でもかまいません. スクリプト言語すら使わないで実現できるような気がするのですが思いつきませんでした. よろしくお願いします.

  • windowsXP コマンドプロンプトでテキストファイルを閲覧する方法

    こんにちは。 コマンドプロンプト初心者です。 テキストファイルを、最終行から10行~最終行指定して、 閲覧する方法などがあれば教えて下さい。 ※本当は、IPMsgの送受信を、コマンドプロンプト上で行いたいのですが、 方法が思い浮かばなくて、ログファイルの中から、 新しいめのデータを抽出しようと思っております。 IPMsgの受信データを自動的にコマンドプロンプトに出力することが できれば一番なのですが・・・。 よろしくお願いいたします。