コンピュータ(TIPS)

DOSコマンドでFIFO(先入れ先出し)するコマンドTIPスっ

DOSコマンドのバッチファイルは、高速な上、フリーソフトなどがダウンロードできない会社のPCなどでも、メモ帳1つで対応できるので、便利です。

その反面、コマンド数が少ないので、出来る事も少ないですが、工夫1つで実現可能な事がたくさんあります。

今日は、普段つかっているDOSコマンドで、よく使うコツを紹介します。

基本コピペでOK。DOSコマンドで、FIFO(先入れ、先出し)をする

linuxなら、tailやheadという便利なコマンドがありますが、Dosにはありません。でもdosのコマンドも、工夫すれば高速なテキスト処理が可能です。

まずは、1行目を取り出します。

入力ファイル

text.txt

千葉
東京
神奈川
埼玉
栃木

findstr /N “.” text.txt|findstr /B “1:” >out.txt

出力ファイル

out.txt

1:千葉

解説

findstrは、text.txtのファイルから、特定の文字列を探し出します。ドットは、任意の一文字ですので、全部の行が選択されます。(但し、空白行は除きます)/Nのオプションで、全ての文字の先頭に、行番号が振られます。そこから、先頭が 「1:」で始まる行。つまり1番目の行をout.txtに書き出します。これで、1行目の出力が完了しました。 つまり、任意の行を抜き出す事も可能です。

1行目から、本文だけ取り出す。

out.txtには、元々無かった「1:」が入ってますので、これを取り除きます

入力ファイル

text.txt

1:千葉

set /p x=””<out.txt
set x=%x:*:=%
echo %x%>out1.txt
out1.txt

千葉

解説

変数xにout.txtの中身を、挿入します。次にsetコマンドをつかって、「:」の前の文字を削除します。 これで、xの中身は、千葉のみになります

残りの行をファイルに保管する。

more +1 text.txt>out2.txt

解説

more のオプションをつかって、元ファイルから、1行目をスキップして出力します。

linuxのような tailやheadのないdosでも、先入れ後出しを再現できました。

追記、moreコマンドでは、長文には向かないので、別の方法

more +コマンドでは、65535行以上に対応できないので、別の方法を追記します。

ちょっとトリッキーですが、スピードは早いので、確実です。

set /p xxx=”xxxx”<nul >mark.txt
type mark.txt text.txt|findstr /V /B /C:”xxxx” >out2.txt

解説 まず、set /pコマンドを使うと、改行の入っていないファイルが作れます。(echoコマンドだと、改行が必ず入ってしまう)リダイレクトで、mark.txtという仮ファイルを作ります。このファイルには、仮に「xxxx」という文字列を入れておきます。 そして、そのファイルと、元ファイルをtypeで1つにします。 そうすると、ファイルの先頭が「xxxx」になりますので、この行を取り除いてあげると、2行目以降のファイルが残る算段です。もし、「xxxx」で始まる行が別にある場合は、削除されてしまうので、markとなる文字列は、環境にあわせて、工夫が必要です。