我有一个 .txt 文件。而且每一行都有中文。我想把中文翻译成urlencoding。
我怎样才能得到它?
txt.文件
http://wiki.com/ 中文
http://wiki.com/ 中国
目标文件
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
中处理。
最佳答案
使用 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
关于linux - 在awk中将中文翻译成urlencoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485772/