仅使用 AWK,我需要仅在超过 20 个字符时计算单词的出现次数。我已经找到了计算单词频率的方法,但是在设置这个参数时遇到了一些问题。
接下来,我想将这些单词与我要定义的同义词分开,但跳过一个单词。
我的意思是:如果“hello”出现了 30 次,我想将2nd
, 4th
,6th
等等替换为“hi”,而不是1st
, 3rd
, ... 仍然是“hello”。
这就是我所做的:
BEGIN { FS="[^a-zA-Z]+" } {
for (i=1; i<=NF; i++) {
word = tolower($i)
words[word]++
}
}
END {
for (w in words)
printf("%3d %s\n", words[w], w)
}
答案1
你的意思是:
BEGIN { flag=0; FS="[^a-zA-Z]+" } {
for (i=1; i<=NF; i++) {
word = tolower($i)
if ($0 ~ /hello/ ) {
if (flag) {
sub ("hello", "hi", word );
}
flag= !flag
}
words[word]++
}
}
END {
for (w in words)
printf("%3d %s\n", words[w], w)
}
上面的作用是在程序初始化时设置 a flag
to 。0
awk
在文件的迭代中,它检查hello
输入字符串,如果hello
找到,则检查flag
.如果flag
是0
,则不要更改hello
为hi
。
flag
然后切换(0 => 1, 1 => 0)的值。
下次hello
出现时,该flag
值为,并且将进行to1
的替换。hello
hi