将中文翻译为awk中的urlencoding

时间:2015-05-27 14:41:19

标签: linux shell awk url-encoding

我有一个.txt文件。每行包含中文。我想将中文翻译成urlencoding。

我怎样才能得到它?

txt.file

http://wiki.com/    中文
http://wiki.com/    中国

target.file

http://wiki.com/%E4%B8%AD%E6%96%87
http://wiki.com/%E4%B8%AD%E5%9B%BD

我找到了一个shell脚本方式来接近它:

echo '中文' | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g' | tr '[a-z]' '[A-Z]'

所以,我想把它嵌入awk这样,但我失败了:

awk -F'\t' '{
    a=system("echo '"$2"'| tr -d '\n' | xxd -plain | \
    sed 's/\(..\)/%\1/g' | tr '[a-z]' '[A-Z]");

    print $1a
}' txt.file

我尝试过另一种编写外部函数的方法并在awk中调用它,这样的代码再次失败。

zh2url()
{
   echo $1 | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g' | tr '[a-z]' '[A-Z]'
}
export -f zh2url
awk -F'\t' "{a=system(\"zh2url $2\");print $1a}" txt.file

请使用awk命令实现它,因为我实际上还需要在awk同时处理另一件事。

1 个答案:

答案 0 :(得分:3)

使用GNU awk进行协同处理等:

$ cat tst.awk
function xlate(old,     cmd, new) {
    cmd = "xxd -plain"
    printf "%s", old |& cmd
    close(cmd,"to")
    if ( (cmd |& getline rslt) > 0 ) {
        new = toupper(gensub(/../,"%&","g",rslt))
    }
    close(cmd)
    return new
}
BEGIN { FS="\t" }
{ print $1 xlate($2) }

$ awk -f tst.awk txt.file
http://wiki.com/%E4%B8%AD%E6%96%87
http://wiki.com/%E4%B8%AD%E5%9B%BD