ファイルの違いを見つけ、キーでファイルをソートします。

ファイルの違いを見つけ、キーでファイルをソートします。

だから、英語とフランス語の2つの言語ファイルがあります。形式は次のとおりです。

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。これにより、翻訳者にファイルを送信して翻訳できます。

再インポートすると、単にcatを実行してfrench.changes >> french; sort -o Language_fr_FR.properties変更をマージできます。

また、行全体ではなくキーごとに言語ファイルをソートする方法も必要です。

調べてみましたが、diffちゃんと使う方法がわかりません。私はしばらくの間Linuxを使用してきましたが、まだ素晴らしいスクリプトについてはあまり知りませんでした。 :)

助けてくれてありがとう!

答え1

以下は、2つのファイル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

cut@don_crisstiはまた、この場合、st1フィールドに区切り文字 '='を使用してフィルタリストを簡単に作成できることを正しく指摘しました。fd

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

関連情報