将文件中大于最小值小于最大值的所有单词更改为大写AWK

将文件中大于最小值小于最大值的所有单词更改为大写AWK,awk,Awk,我需要一个awk脚本,以取代所有的单词大写更长 比文本文件中的最小字符短,但比最大字符短。这个 必须将参数MIN和MAX传递给脚本 我甚至不知道如何在awk中逐字阅读文件。你能帮我吗? 我到处找,对输入的test.txt没有任何帮助: I need an awk script that replaces to uppercase all the words longer than MIN, but shorter than MAX characters in a text file. The

我需要一个awk脚本,以取代所有的单词大写更长 比文本文件中的最小字符短,但比最大字符短。这个 必须将参数MIN和MAX传递给脚本

我甚至不知道如何在awk中逐字阅读文件。你能帮我吗?
我到处找,对输入的test.txt没有任何帮助:

I need an awk script that replaces to uppercase all the words longer than MIN, 
but shorter than MAX characters in a text file.
The parameters MIN and MAX must be passed to the script.
此脚本:

awk -F"[^a-zA-Z]" 'BEGIN{min=3;max=5}
               {for(i=1; i<=NF; i++){
                    if(length($i)>min && length($i)<max){
                          $i=toupper($i)
                    }
               }print $0}' test.txt
如果要将边界作为参数传递,请执行以下操作:

min=3
max=5
awk -v min=$min -v max=$max -F"[^a-zA-Z]" '{for(i=1; i<=NF; i++){
                    if(length($i)>min && length($i)<max){
                          $i=toupper($i)
                    }
               }print $0}' test.txt
min=3
max=5
awk -v min=$min -v max=$max '{for(i=1; i<=NF; i++) {
                    len = length($i)-(match($i, "[[:punct:]]")!=0?1:0);
                    if(len>min && len<max) $i=toupper($i)                       
               } print $0}' test.txt
min=3
最大值=5

awk-vmin=$min-vmax=$max-F“[^a-zA-Z]”{for(i=1;imin&&length($i)用于输入
test.txt

I need an awk script that replaces to uppercase all the words longer than MIN, 
but shorter than MAX characters in a text file.
The parameters MIN and MAX must be passed to the script.
此脚本:

awk -F"[^a-zA-Z]" 'BEGIN{min=3;max=5}
               {for(i=1; i<=NF; i++){
                    if(length($i)>min && length($i)<max){
                          $i=toupper($i)
                    }
               }print $0}' test.txt
如果要将边界作为参数传递,请执行以下操作:

min=3
max=5
awk -v min=$min -v max=$max -F"[^a-zA-Z]" '{for(i=1; i<=NF; i++){
                    if(length($i)>min && length($i)<max){
                          $i=toupper($i)
                    }
               }print $0}' test.txt
min=3
max=5
awk -v min=$min -v max=$max '{for(i=1; i<=NF; i++) {
                    len = length($i)-(match($i, "[[:punct:]]")!=0?1:0);
                    if(len>min && len<max) $i=toupper($i)                       
               } print $0}' test.txt
min=3
最大值=5
awk-vmin=$min-vmax=$max-F“[^a-zA-Z]”{for(i=1;imin&&length($i)它需要是awk吗

env min=4 max=7 perl -pe 's/\b(\w{$ENV{min},$ENV{max}})\b/\U$1/g' filename
它需要是awk吗

env min=4 max=7 perl -pe 's/\b(\w{$ENV{min},$ENV{max}})\b/\U$1/g' filename

这是一个聪明的解决方案,但它会将所有非字母字符转换为字母spaces@karakfa:我在我的答案中添加了一个修改后的解决方案。谢谢!@glennjackman:我在我的答案中添加了一个修改后的解决方案。谢谢!这是一个聪明的解决方案,但它会将所有非字母字符转换为字母spaces@karakfa:我已将修改后的解决方案添加到我的ans中wer.谢谢!@glennjackman:我在我的答案中添加了一个修改后的解决方案。谢谢!显然你没有在Arnold Robbins的《有效的Awk编程,第四版》一书中查找,因为书中有很多有用的文本。我不敢相信你得到了两个答案,没有示例输入、预期输出,也没有尝试自己解决,甚至没有描述“单词”对您来说是什么(例如在POSIX中,连字符被视为单词组成字符,对您来说是吗?
这是一个单词还是两个单词?).一定是满月了….很明显,你没有在Arnold Robbins的《有效的Awk编程》第四版中查找,因为这本书中有很多有用的文本。我不敢相信你得到了两个答案,没有样本输入,没有预期的输出,也没有尝试自己解决,甚至没有描述“单词”对你来说是什么(例如,在POSIX中,连字符被视为单词组成字符,对您来说是吗?
这是一个单词还是两个?)。必须是满月。。。。