ファイルから重複した行を削除し、新しいファイルに一意の行を保存するコマンドがあります。
uniq telphone.txt output.txt
.txt
ところで、現在のフォルダ内のすべてのファイルを調べて、重複したファイルを削除し、同じファイル名で保存するコマンドを見つけようとします。
telphone.txt
重複したエントリを削除して別の名前で保存しますtelphone.txt
。
その後、新しいファイルがある場合はhomes.txt
同じことを行いますhomes.txt
。
可能ですか?
ベストアンサー1
#!/bin/sh
tmpfile=$(mktemp)
for file in ./*.txt; do
cp "$file" "$tmpfile" &&
uniq "$tmpfile" >$file"
done
rm "$tmpfile"
その後、現在のディレクトリで終わるすべての名前を繰り返し、.txt
各名前の重複行を順番に削除します。
ファイルは最初に一時ファイルにコピーされ、次にを使用して元のuniq
ファイル名として出力されます。
これにより、元のファイルの権限が変更されなくなります(後に続く可能性がありますuniq "$file" >"$tmpfile"
)cp "$tmpfile" "$file"
。
また、呼び出しが成功したかどうかによって異なりますuniq
。失敗するcp
と、コマンドをリダイレクトすると元のファイルが切り捨てられ、そのデータが失われます。cp
uniq