我有一堆包含csv文件的目录。我想从所有文件中删除重复行。
我尝试过awk解决方案但是对每个文件执行此操作似乎有点乏味。
awk '!x[$0]++' file.csv
即使我愿意
awk '!x[$0]++' *
我将丢失文件名。有没有办法只使用一个命令或脚本从所有文件中删除重复项。
只是澄清一下 如果目录中有3个文件,则输出应包含3个文件,每个文件独立排序。运行命令或脚本后,同一文件夹应包含3个文件,每个文件都有唯一的条目。
答案 0 :(得分:0)
for f in dir/*;
do awk '!a[$0]++' "$f" > "$f.uniq";
done
在测试后覆盖现有文件更改为:awk '!a[$0]++' "$f" > "$f.uniq" && mv "$f.uniq" "$f"
!
答案 1 :(得分:0)
这将创建新文件,后缀为.new
,只有唯一的行:
gawk '!x[$0]++{print>(FILENAME".new")}' *.csv
工作原理
!x[$0]++
这是一个条件。它的评估结果为真仅当前行$0
,之前没有见过。
print >(FILENAME".new")
如果条件的计算结果为true,则执行此print语句。它将当前行写入名称为当前文件名FILENAME
的文件,后跟字符串.new
。
答案 2 :(得分:0)
使用GNU awk进行“inplace”编辑和输出文件的自动打开/关闭管理:
awk -i inplace '!seen[FILENAME,$0]++' *.csv