【发布时间】:2014-11-06 19:54:12
【问题描述】:
我有两个问题:
1) 我想从脚本中删除所有非英文字母 2)我想计算一个文本的长度,从标点符号、空格等中清除。我只是不知道这部分有什么问题
Linux 脚本:
#!/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:命令。第 17 行:长度++ awk:命令。第 17 行:^ 意外的换行符或字符串结尾
请至少帮助我解决第二个问题。我只是没有什么问题,一切似乎都很好。先谢谢了!
【问题讨论】:
-
否定字符类是
[^a-z]不是![a-z]。此外,您不需要多次调用gsub,因为空格、数字和标点符号都是“非字母”。 -
另外,您可以使用
length()函数来代替计算剩余字母的数量。 -
您的字面意思是“英文字母”还是“字母字符”?尽管它们在用英语编写的文本中可能相同,但总体上可能存在很大差异,并且 awk 不支持前 AFAIK。