Besoin de créer un awk
script pour convertir un glyph
(https://en.wikipedia.org/wiki/Glyph) en Unicode
(JavaScript
syntaxe), et l'inverse - Unicode à un glyphe.En utilisant awk, comment remplacer une chaîne par une autre?
Les données de base sont stockées au NotePad++
avec le codage UTF-8
.
Voici mes progrès.
Use_case_1
fichier Dictionnaire (de dict_1_.txt):
A \u0041
À \u00C0
fichier d'entrée (input_1_.txt):
A
À
écriture awk
pour générer Unicode pour équivalent g Lyph:
awk 'NR == FNR { a[$1] = $2; next } $1 in a { $1 = a[$1] } $2 in a { $2 = a[$2] } 1' dict_1_.txt input_1_.txt
produire correctement:
\u0041
\u00C0
Use_case_2
fichier Dictionnaire (de dict_2_.txt)
\u0041 A
\u00C0 À
fichier d'entrée (input_2_.txt)
\u0041
\u00C0
script awk
pour générer des glyphes pour Unicode équivalent:
awk 'NR == FNR { a[$1] = $2; next } $1 in a { $1 = a[$1] } $2 in a { $2 = a[$2] } 1' dict_2.txt input_2.txt
produire correctement:
A
À
Alors, peut avec succès "aller-retour" sur un un seul symbole.
Mais comment gérer un dictionnaire plus complet et plus d'un mot par ligne?
Voici des exemples de données.
fichier d'entrée (de input_3_.txt)
PUDÍN, ALMIDÓN
fichier Dictionnaire (de dict_3_.txt)
, \u002C
A \u0041
D \u0044
I \u0049
Í \u00CD
L \u004C
M \u004D
N \u006E
Ó \u00D3
P \u0050
U \u0055
<space> \u0020
Le script awk
devrait générer:
\u0050\u0055\u0044\u00CD\u006E\u002C\u002C\u0041\u004C\u004D\u0049\u0044\u00D3\u006E
fichier d'entrée (input_4_.txt)
\u0050\u0055\u0044\u00CD\u006E\u002C\u002C\u0041\u004C\u004D\u0049\u0044\u00D3\u006E
fichier Dictionnaire (dict_4_.txt)
\u002C ,
\u0041 A
\u0044 D
\u0049 I
\u00CD Í
\u004C L
\u004D M
\u006E N
\u00D3 Ó
\u0050 P
\u0055 U
\u0020 <space>
Le script awk
devrait générer:
PUDÍN, ALMIDÓN
Voici un ensemble plus complexe de chaînes d'entrée (un par ligne):
MONO Y DIACETIL ÉSTERES DEL ÁCIDO TARTÁRICO DE MONO Y DIGLICÉRIDOS DE ÁCIDOS GRASOS AÑADIDOS
043 HUEVAS DE PESCADO (INCLUYENDO ESPERMA=HUEVAS BLANDAS) Y VÍSCERAS COMESTIBLES DE PESCADO
ACEITE DE SOJA OXIDADO TÉRMICAMENTE Y EN INTERACCIÓN CON MONO Y DIGLICÉRIDOS DE ÁCIDOS GRASOS
BANDEJA PLÁSTICA O CAZUELA, CUBIERTA DE PAPEL DE ALUMINIO O ENVOLTURA
Dans les exemples Dictionnaire ci-dessus, ont utilisé <space>
pour indiquer la ' symbole 'entre les mots et après une virgule. Cela signifie probablement qu'une solution doit utiliser \t
pour FS
à la fois dans le fichier Dictionnaire et dans le fichier d'entrée. Actuellement le FS
est un 'espace' de clavier. Le RS
est également \n
.
De plus, je dois faire la même chose pour hexadécimal, donc une solution doit traiter un fichier Dictionnaire comme celui-ci:
Í Í
Ó Ó
par rapport à l'exemple Dictionnaire ci-dessus:
Í \u00CD
Ó \u00D3
Comment améliorer ou remplacer mes simples scripts awk
avec des scripts qui traitent les chaînes les plus longues sur plusieurs lignes?
wow. cette question est trop longue. Que diriez-vous de le raccourcir? – NinjaGaiden
La question est: 'Comment améliorer ou remplacer mes scripts awk simples avec des scripts qui traitent les chaînes plus longues sur plusieurs lignes? Le texte montre le progrès (MCV) et les données qui, espérons-le, peuvent être traitées par une solution proposée. –