我目前正在开发一个项目,我们有一个包含数千个kvp的.properties文件。其中一些kvp存在多次......所以我想删除重复的行(如果它们当然是相同的)。但我也担心一些键是重复的,但有不同的值。
我很确定有更简单的方法可以做到这一点,但我想把bash脚本作为一项额外的技能,但是......我基本上没有bash知识。尽管如此,我提出了以下解决方案,但我非常怀疑这是最有效的方法。有更简单的方法吗?
#! /bin/bash
# Remove unique lines (key and value are equal)
sort $1 | uniq > temporary.tmp
# Find keys that are not unique
doubleKeys=`awk -F"=" '{print $1}' temporary.tmp | sort | uniq -d`
if [ -z $doubleKeys ] ; then
mv temporary.tmp final.txt
echo "Removed doubles, final file is final.txt"
else
echo $doubleKeys > DoubleKeys.log
rm temporary.tmp
echo "Double keys found with different values, see DoubleKeys.log"
fi
答案 0 :(得分:1)
到目前为止代码看起来很好。一些小的挑剔
sort $1 | uniq
替换为sort -u $1
sort
不是必需的,因为temporary.tmp
已经排序awk -F=
的替代方案可能是cut -d= -f1
,但我不确定它是否更有效除非你多次运行,否则我不会投入太多时间来优化它。与每月等待一两分钟相比,调整和摆弄更容易花费更多。