AWK - 提取单词的最后一个音节

AWK - Extracting the last syllable of words

我必须提取几个单词的最后一个音节。

单词总是以辅音结尾。

可能的辅音是这些:"b c cs d dz dzs f g gy h j k l ly m n ny p q r s sz t ty v w x y z zs"

可能的元音是这些:"a o u ö ü e i á ó ú ő ű é í"

鉴于这个词,"vélemény",我必须提取 ény

鉴于这个词,"otthion",我必须提取 ion

鉴于这个词,"feladat",我必须提取 at

我做了这个功能,会return最后一个的位置vowel.But如果两个元音在一起怎么办?

function extrac(arr1,arr2,x1)
{
    # arr1 - array-vowels "a o u ö ü..."
    # arr2 - array-word divided into letters
    # x1 - length-arr2

    for (ix=x1; ix>0; ix--)
    {
        for (jx=1; jx<=14; jx++)
        {
            if (arr1[jx] == arr2[ix])
            {
                return ix;
            }
        }
    }

}

vélemény
otthion
feladat

期望的输出:

vélemény    ény
otthion    ion
feladat    at
$ awk 'match([=10=],/[aouöüeiáóúőűéí]+[^aouöüeiáóúőűéí]+$/,a){print [=10=], a[0]}' file
vélemény ény
otthion ion
feladat at

以上使用 GNU awk 作为第三个参数来匹配 ()。对于其他 awks,它将是:

$ awk 'match([=11=],/[aouöüeiáóúőűéí]+[^aouöüeiáóúőűéí]+$/){print [=11=], substr([=11=],RSTART,RLENGTH)}' file
vélemény ény
otthion ion
feladat at

对于某些 awk,您也许可以使用等价 类 而不是列出每个元音的每个可能变体:

/[[=a=][=e=][=i=][=o=][=u=]]+[^[=a=][=e=][=i=][=o=][=u=]]+$/

但是 GNU awk 不支持等效 类。