파일의 차이점을 찾고 키별로 파일을 정렬합니다.

파일의 차이점을 찾고 키별로 파일을 정렬합니다.

그래서 영어와 프랑스어라는 두 가지 언어 파일이 있습니다. 형식은 다음과 같습니다.

key=translation

영어로 된 예는 다음과 같습니다.

ui.title=My Title

프랑스 국민:

ui.title=Mon Titre

그래서 언어 파일을 읽고 차이점을 찾는 스크립트가 필요합니다. 영어 파일에 키가 있다고 가정합니다.

ui.title=Title
ui.close=Close

하지만 프랑스어만

ui.title=Mon Titre

스크립트를 실행한 후 french.changesinclude 가 출력되어야 합니다 ui.close=Close. 이렇게 하면 번역자에게 파일을 보낼 수 있고 번역할 수 있습니다.

다시 가져오면 간단히 cat을 실행하여 french.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

cut@don_crissti는 또한 이 경우 st 1​​필드 에 구분 기호 '='를 사용하여 필터 목록을 쉽게 생성할 수 있다는 점을 올바르게 지적했습니다 .fd

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

관련 정보