[英]How do I translate a list using a dictionary in bash?
说我有一个字典TSV文件dict.txt
:
apple pomme
umbrella parapluie
glass verre
... ...
另一个文件list.txt
包含单词列表(来自dict.txt
左列):
pie
apple
blue
...
我想将它们翻译成dict.txt
右栏中的相应单词,即:
tarte
pomme
bleu
...
最简单的方法是什么?
您可以使用awk:
awk 'FNR==NR{a[$1]=$2;next} a[$1]{print a[$1]}' dict.txt list.txt
编辑:如果需要使用制表符字段分隔符在字典中将多个单词(用空格分隔)作为单词含义,则可以使用:
awk -F '\t' 'FNR==NR{a[$1]=$2;next} a[$1]{print a[$1]}' dict.txt list.txt
如果您没有很多单词(以便所有内容都适合存储在内存中),则可以使用关联数组:
#!/bin/bash
declare -A english2french=()
# Build dictionary
linenb=0
while ((++linenb)) && IFS=$'\t' read -r en fr; do
if [[ -z $fr ]] || [[ -z $en ]]; then
echo "Error line $linenb: one of the two is empty fr=\`$fr' en=\`$en'"
continue
fi
english2french["$en"]=$fr
done < dict.txt
# Translate
linenb=0
while ((++linenb)) && read -r en; do
[[ -z $en ]] && continue
fr=${english2french["$en"]}
if [[ -n $fr ]]; then
echo "$fr"
else
echo >&2 "Error line $linenb: word \`$en' unknown"
fi
done < list.txt
似乎有点长,但是有很多错误检查;)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.