首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算UNIX中文本的长度

计算UNIX中文本的长度
EN

Stack Overflow用户
提问于 2014-11-06 19:54:12
回答 2查看 629关注 0票数 0

我有两个问题:

( 1)我想从我的剧本中删除每一个非英语字母。2)我想计算一段文字的长度,从标点符号、空格等中清除出来。我只是不知道这部分有什么问题。

Linux脚本:

代码语言:javascript
复制
    #!/usr/bin/bash

awk '

BEGIN { FS="" } # defining a field separator in order to treat each character one by one
{
    $0 = tolower($0)    # removing case distinctions
    gsub(/[[:punct:]]/,"", $0) # removing every punctuation mark
    gsub(/\ /, "", $0) # removing spaces
    gsub(/[0-9]/, "", $0) # removing digits
    gsub(/![a-z]/, "", $0) # removing every non-English letter <- This does not work

    #After the removing of every possible punctuation mark, space, digit and non-English
    #letter in the user-defined text, we calculate the occurence of each character and place into an array



    for (i = 1; i <= NF; i++)
        {
          freq[$i]++
          length++
        }

}

但是它显示了以下错误: awk: cmd。第17行: length++ awk: cmd。第17行:^字符串的意外换行符或结尾

请至少帮我回答第二个问题。我只是不知道出了什么问题,一切似乎都很好。事先谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-06 20:29:52

使用awk

代码语言:javascript
复制
awk '{gsub("[^A-Za-z]", "");i+=length}END{print i}'

使用trwc

代码语言:javascript
复制
tr -C -d "A-Za-z" | wc -c

它们都删除不在A-Za-z范围内的所有字符,然后计数其余的字符。tr one具有依赖于您的区域设置的优点或缺点。

您还可以创建一个awk脚本,就像创建一个shell脚本一样。

代码语言:javascript
复制
#!/usr/bin/awk
    { gsub("[^A-Za-z]", ""); i+=length }
END { print i }

为了获得最大的可移植性,您需要将脚本中的区域设置为POSIX,或者列出每个字符。

代码语言:javascript
复制
tr -C -d "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | wc -c
票数 0
EN

Stack Overflow用户

发布于 2014-11-06 20:49:01

听起来这可能是你想要的(使用GNU awk进行多个字符的RS)

代码语言:javascript
复制
awk -v RS='[[:alpha:]]' 'END{print (NR?NR-1:0)}' file

例如:

代码语言:javascript
复制
$ cat file
a
    b,c
  d3e
$ awk -v RS='[[:alpha:]]' 'END{print (NR?NR-1:0)}' file
5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26788240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档