查找文件中的差异并按键对文件进行排序

查找文件中的差异并按键对文件进行排序

所以我有两种语言文件,英语和法语。它们的格式如下:

key=translation

英语的一个例子是:

ui.title=My Title

法语:

ui.title=Mon Titre

所以我需要一个读取语言文件并找到差异的脚本。假设英文文件有键:

ui.title=Title
ui.close=Close

但法语只有

ui.title=Mon Titre

运行脚本后,它应该输出一个french.changes包含ui.close=Close.这样,我可以将文件发送给我的翻译人员,他们可以翻译它。

当我取回它时,我可以简单地运行 catfrench.changes >> french; sort -o Language_fr_FR.properties来合并更改。

我还需要一种按键而不是整行对语言文件进行排序的方法。

我研究过diff但不确定如何正确使用它。我已经使用 Linux 有一段时间了,但在花哨的脚本编写方面还不太了解:)

谢谢你的帮助!

答案1

以下内容采用两个文件 eng 和 fr,按键对它们进行排序,然后按键“连接”它们,仅显示文件 1 (eng) 中任何缺失的条目。

join -t= -v1 <(sort -t= -k 1,1 eng) <(sort -t= -k 1,1 fr)

所以你想要的键排序是例如:

sort -t= -k 1,1 eng

答案2

你可以使用:

grep -v -f <(sed -r 's/([^=]*).*$/\1/' fr.i18n.txt) en.i18n.txt

它从 en.i18n.txt 中过滤 fr.i18n.txt 中的所有键。

例子:

$ cat > en.i18n.txt
ui.title=Title
ui.close=Close
ui.edit=Edit
ui.accept=Accept
^D
$ cat > fr.i18n.txt
ui.title=Titre
ui.edit=Modifier
^D
$ grep -v -f <(sed -r 's/([^=]*).*$/\1/' fr.i18n.txt) en.i18n.txt
ui.close=Close
ui.accept=Accept
$ FINISHED="$(grep -v -f <(sed -r 's/([^=]*).*$/\1/' fr.i18n.txt) en.i18n.txt)"
$ echo "$FINISHED"
ui.close=Close
ui.accept=Accept

@don_crissti 也正确地指出,在这种情况下,过滤器列表也可以通过使用elimiter '='轻松生成cutst1字段:fd

grep -v -f <(cut -d= -f1 fr.i18n.txt) eng.i18n.txt

相关内容