Найти отличия в файле и сортировке файла по ключу

Поэтому у меня есть два языковых файла: английский и французский. Они находятся в таком формате:

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 . Таким образом, я могу отправить файл моим переводчикам, и они могут его перевести.

Когда я french.changes >> french; sort -o Language_fr_FR.properties его, я могу просто запустить cat french.changes >> french; sort -o Language_fr_FR.properties french.changes >> french; sort -o Language_fr_FR.properties , чтобы объединить изменения.

Мне также нужен метод сортировки языковых файлов ключом не всей строки.

Я просмотрел diff но не уверен, как правильно его использовать. Я использую Linux довольно долгое время, но не настолько, чтобы ускорять причудливые скрипты 🙂

Спасибо за любую помощь!

2 Solutions collect form web for “Найти отличия в файле и сортировке файла по ключу”

Вы можете использовать:

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

Который фильтрует все ключи из файла fr.i18n.txt из en.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 также правильно указал, что в этом случае список фильтров также может быть легко сгенерирован с cut оловом в 1 м столбце, используя d exciter '=':

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

Следующее занимает два файла: 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 
  • Использование sed для цветного вывода из команды на Solaris
  • Извлечь текст, включая parens
  • Извлечь два значения из вывода команды
  • Sed для удаления между разделителями, но сохранить первый разделитель
  • Почему не матч SHA?
  • захватить текст из файла vtt
  • сравнить файлы по строкам и создать новое одно bash-программирование
  • Управление дублированными строками в файлах
  • Grep точное количество цифр и некоторые другие символы
  • Скопируйте первые 2 строки из файла, а затем удалите строки
  • Улучшить команду sed для замены первого экземпляра символа и всех следующих символов?
  • Interesting Posts

    Почему я вижу разные версии истории bash для одного и того же пользователя

    Возможно ли установить и изменить файл loopback без sudo / root?

    Как маршрутизировать трафик через разные прокси-серверы на основе назначения

    Может ли компьютер Linux получать сканированные изображения со сканера с помощью WSD (Web Services on Devices)?

    Открытый порт 80 в CentOS 6.5

    Где установить GRUB?

    Как сравнить два каталога полностью без git?

    Как я могу сопоставить символ разрыва страницы в регулярном выражении?

    Как узнать, на какой файл влияет плохой сектор?

    Как рассчитать загрузку процессора?

    Файлы с файлами Makefile с шаблоном

    владелец файла сервера и группа были изменены при локальном редактировании файла

    Удалить библиотеку, установленную через make install

    На компьютере с несколькими окружениями рабочего стола, как настроен DE по умолчанию?

    Выделите n-й столбец вывода ps

    Linux и Unix - лучшая ОС в мире.