使用bash删除属性文件中的双重属性

时间:2013-01-02 20:44:32

标签: bash

我目前正在开发一个项目,我们有一个包含数千个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

1 个答案:

答案 0 :(得分:1)

到目前为止代码看起来很好。一些小的挑剔

  • 您可以将sort $1 | uniq替换为sort -u $1
  • 第二个sort不是必需的,因为temporary.tmp已经排序
  • awk -F=的替代方案可能是cut -d= -f1,但我不确定它是否更有效

除非你多次运行,否则我不会投入太多时间来优化它。与每月等待一两分钟相比,调整和摆弄更容易花费更多。