コンピュータ(TIPS)

DOSコマンドでuniqを再現するコマンドTIPスっ

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

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

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

Dosでuniqを再現する。簡単バッチファイル

巨大なテキストファイルを扱う時に、重複チェックはしたいですね。linuxなら、uniqという便利なコマンドがありますが、Dosにはありません。そこで、uniqの

まずは、バッチファイルを作成。

uniq.bat

@ECHO OFF
setlocal enabledelayedexpansion
sort %1>_%1
set OLD=
set fn=%1
del uni_%1 2>nul 1>nul
for /f “delims=” %%X in (_%1) do (
if “%%X” NEQ “!OLD!” (
echo %%X>>uni_%1
set OLD=%%X
)
)
del _%1

入力ファイル

text.txt

千葉
東京
神奈川
埼玉
栃木
千葉
神奈川

実行

uniq.bat  text.txt

重複していないファイルが、「uni_ファイル名」で出力されます。出力ファイル

uni_text.txt

埼玉
神奈川
千葉
東京
栃木

解説

まずは、ソートをつかって、文字列を整列させます。DOSのソートコマンドには、linuxのような、重複を削除してくれるオプションがないので、その部分をfor文でやります。

for文を使って、1行ずつ抜き出し、xに代入します。これが、変数OLD(前の行)と比較して、異なる場合は、ファイルに追記し、変数OLDのに代入します。同じ場合は、ファイルに追記はせず、次の行を読みに行きます。

ソートしてしまうので、このバッチでは、元の順番には戻りませんが、もう少し工夫すると、元の順番に戻す事も可能です。