【发布时间】:2017-08-12 09:36:52
【问题描述】:
我正在尝试确定字符串中的所有字符在 AWK 中是否相同。这是我当前的代码,但必须有更简洁的方式,不是吗?
same = 1;
for (i = 1; i < length(s); i++)
if (substr(s, i, 1) != substr(s, i+1, 1))
same = 0;
【问题讨论】:
我正在尝试确定字符串中的所有字符在 AWK 中是否相同。这是我当前的代码,但必须有更简洁的方式,不是吗?
same = 1;
for (i = 1; i < length(s); i++)
if (substr(s, i, 1) != substr(s, i+1, 1))
same = 0;
【问题讨论】:
您可以使用regular expression 匹配操作:
Pattern="^" substr(s, 1, 1) "+$"
if (s ~ Pattern) print "match!"
匹配模式为:“匹配任何由一个或多个字符组成的字符串,从头到尾等于 s 的第一个字符”。
【讨论】:
另一种awk 方法
awk '{line=$0;
print length(line)==gsub(substr(line,1,1),"",line)}'
【讨论】:
所有相同的字符:
awk '$0 !~ "[^"substr($0,1,1)"]"'
awk '$0 ~ "^"substr($0,1,1)"+$"'
至少一个不同的字符:
awk '$0 ~ "[^"substr($0,1,1)"]"'
awk '$0 !~ "^"substr($0,1,1)"+$"'
【讨论】: