Windows マシンで数百のファイルをクリーンアップする作業を行っていますが、そのために必要なことの 1 つは、いくつかの重複行を削除することです。したがって、サンプル ファイルは次のようになります。
foo=false
bar=true
baz=false
baz=false
baz=false
それで、sed
私はこのサイトに出くわしました。このサイトでは、重複した行を削除する行を紹介していました.
sed "$!N; /^\(.*\)\n\1$/!P; D" textfile.txt
そこで、コマンド ウィンドウにプラグインして動作するかどうかを確認したところ、コンソール ウィンドウに重複した行が削除されたことが示されました。その後、その行をバッチ スクリプトに挿入して、編集が必要なファイルのリストに対して実行しました。
FOR /F %%a IN ('listfile.txt') DO (
sed "$!N; /^\(.*\)\n\1$/!P; D" %%a
)
しかし、ファイルのテスト リストに対してこれを実行すると、重複する行の 1 つを除いて、ファイルからすべての行が削除されました。
私はsed
その行が何をしているのかを確実に知るには十分に精通していませんが、それをテストしたところ、私が望んでいたことを行っていることがわかりました。それで、何が得られますか?sed
バッチ ファイルで動作する方法で何か不足していますか?
私が試したコメントに基づいて:
gawk "!a[$0]++" textfile.txt
また、コマンドラインでは機能しますが、スクリプトでは機能しません。したがって、バッチファイルがこのコマンドを実行する方法には間違いなく問題がありますが、それが何であるかを理解することはできません.