bash从文件夹中的txt文件中删除重复行

bash从文件夹中的txt文件中删除重复行

我有这个命令可以从文件中删除重复的行并将唯一的行保存在新文件中

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命令的重定向将截断原始文件,并且您将丢失该数据。

答案2

您需要使用临时文件,因为uniq>会在打开时截断文件。

尝试这个,

for f in *.txt; do
    tmpf=$(mktemp)
    uniq "$f" "$tmpf" && mv "$tmpf" "$f"
done

相关内容