【发布时间】:2017-01-05 20:35:37
【问题描述】:
需要创建一个awk 脚本来将glyph (https://en.wikipedia.org/wiki/Glyph) 转换为Unicode(JavaScript 语法),反之亦然 - Unicode 转换为字形。
源数据以UTF-8 编码存储在NotePad++ 中。
这是我的进度。
Use_case_1
字典文件 (dict_1_.txt):
A \u0041
À \u00C0
输入文件 (input_1_.txt):
A
À
awk 为等效字形生成 Unicode 的脚本:
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
正确生产:
\u0041
\u00C0
Use_case_2
字典文件 (dict_2_.txt)
\u0041 A
\u00C0 À
输入文件 (input_2_.txt)
\u0041
\u00C0
awk 用于为等效 Unicode 生成字形的脚本:
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
正确生产:
A
À
因此,可以在单个符号上成功“往返”。
但是如何处理更全面的字典和每行一个以上的单词呢?
这是示例数据。
输入文件 (input_3_.txt)
PUDÍN, ALMIDÓN
字典文件 (dict_3_.txt)
, \u002C
A \u0041
D \u0044
I \u0049
Í \u00CD
L \u004C
M \u004D
N \u006E
Ó \u00D3
P \u0050
U \u0055
<space> \u0020
awk 脚本应该生成:
\u0050\u0055\u0044\u00CD\u006E\u002C\u002C\u0041\u004C\u004D\u0049\u0044\u00D3\u006E
输入文件 (input_4_.txt)
\u0050\u0055\u0044\u00CD\u006E\u002C\u002C\u0041\u004C\u004D\u0049\u0044\u00D3\u006E
字典文件 (dict_4_.txt)
\u002C ,
\u0041 A
\u0044 D
\u0049 I
\u00CD Í
\u004C L
\u004D M
\u006E N
\u00D3 Ó
\u0050 P
\u0055 U
\u0020 <space>
awk 脚本应该生成:
PUDÍN, ALMIDÓN
这是一组更复杂的输入字符串(每行一个):
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
在上面的字典示例中,使用<space> 表示单词之间和逗号后的“符号”。这可能意味着解决方案应该在 Dictionary 文件和 Input 文件中使用 \t 代替 FS。目前FS 是键盘“空格”。 RS 也是 \n。
此外,我需要对十六进制执行相同的操作,因此解决方案需要像这样处理字典文件:
Í Í
Ó Ó
与上面的字典示例相比:
Í \u00CD
Ó \u00D3
如何用处理多行较长字符串的脚本改进或替换我的简单 awk 脚本?
【问题讨论】:
-
哇。这个问题太长了。缩短它怎么样?
-
问题是:
How to improve or replace my simple awk scripts with scripts that process the longer strings on multiple lines?。文本显示了进展 (MCV) 和希望可以由提议的解决方案处理的数据。