一些awk命令解释日志
程序员文章站
2022-04-11 17:28:26
...
1 awk -v命令解析
text=data/local/train/text
lexicon=data/local/dict/lexicon.txt
dir=data/local/lm
mkdir -p $dir
cleantext=$dir/text.no_oov
cat $text | awk -v lex=$lexicon 'BEGIN{while((getline<lex) >0){ seen[$1]=1; } }
{for(n=1; n<=NF;n++) { if (seen[$n]) { printf("%s ", $n); } else {printf("<UNK> ");} } printf("\n");}' \
> $cleantext
【cat $text】
这里是将text中每行读进管道【逐行读取】
【awk -v lex=$lexicon】
-v是准备开始定义一个临时变量叫lex,其值为变量lexicon的内容【getline<lex】
是读lex=data/local/dict/lexicon.txt中的每行【seen[$1]】
因为是一行一行读,每行以空格隔开的多列如啊 aa a1
,这里是取第一列如啊
【{}】
这里表示对管道中一行的并行处理【for(n=1; n<=NF;n++)】
NF表示一行中的总列数(空格隔开)
,循环读进每列【if (seen[$n])】
如果这列(词)的值为真(1)就是在seen中存在的,则直接打印否则为<UNK>
【data/local/train/text】内容
我 是 不 喜欢 你 的
你 不是 那么 讨厌
我 知道 你 很 差劲 但是 你 也 应该 努力 才对
【data/local/dict/lexicon.txt】内容
SIL sil
<UNK> sil
啊 aa a1
啊 aa a2
啊 aa a4
啊 aa a5
啊啊啊 aa a2 aa a2 aa a2
啊啊啊 aa a5 aa a5 aa a5
阿 aa a1
阿 ee e1
...