如何使用awk根据十六进制间隔列表提取行? 输入文件 间隔列表

如何使用awk根据十六进制间隔列表提取行? 输入文件 间隔列表,awk,unicode,hex,Awk,Unicode,Hex,unicode代码点列表 4E00-9FFF 3400-4DBF 20000-2A6DF 2A700-2B73F 2B740-2B81F 2B820-2CEAF F900-FAFF 问题: 如何仅打印属于十六进制间隔之一的行?尝试以下操作- awk -F'[+ -]' 'NR==FNR{a[$1]=$2;next} $2 in a {print $0}' f2 f1 U+3400 qiū U+4E00 yī 这里是间隔列表。chinese.awk 您的问题包括给定输入的预期输出,以及您迄

unicode代码点列表

4E00-9FFF
3400-4DBF
20000-2A6DF
2A700-2B73F
2B740-2B81F
2B820-2CEAF
F900-FAFF
问题: 如何仅打印属于十六进制间隔之一的行?

尝试以下操作-

awk -F'[+ -]' 'NR==FNR{a[$1]=$2;next} $2 in a {print $0}' f2 f1
U+3400  qiū
U+4E00  yī
这里是间隔列表。

chinese.awk 您的问题包括给定输入的预期输出,以及您迄今为止尝试的内容。看见
awk -F'[+ -]' 'NR==FNR{a[$1]=$2;next} $2 in a {print $0}' f2 f1
U+3400  qiū
U+4E00  yī
#!/usr/bin/env awk

BEGIN {
    split(toggleValues, boundaries, ",")
    start=0
    end=start+1
}

/U\+/ && /kMandarin/ {
    row = toHex($1);
    if (toHex(boundaries[start]) <= row && row <= toHex(boundaries[end])) print $1"\t"$3
    if (row >= toHex(boundaries[end])) {start+=2; end=start+1}
}

function toHex(field) { return strtonum("0x" substr(field, 3)) };
toggleValues="U+4E00,U+9FFF,U+3400,U+4DBF,U+20000,U+2A6DF,U+2A700,U+2B73F,U+2B740,U+2B81F,U+2B820,U+2CEAF,U+F900,U+FAFF"
awk -f src/chinese.awk \
    -v toggleValues="$toggleValues" src/Unihan_Readings.txt 
> src/codepoint-ruby.tsv