【问题标题】:Awk - Regular expression matching against substringsawk - 正则表达式匹配子字符串
【发布时间】:2013-04-13 00:42:29
【问题描述】:

如何检查substr($x, 0, 1) 的第一个字符是否是从A 到L 的字母?

【问题讨论】:

  • 为什么使用 substr() 而不仅仅是 $x ~ /^[A-L]/
  • 我不知道,这就是我发布这个问题的原因;)
  • 然后重新表述您的问题,告诉我们您正在尝试使用一些具有代表性的样本输入和预期输出来做什么。到目前为止,您已经向我们询问了如何针对某个问题实施具体的解决方案,但您还没有告诉我们问题是什么,也没有要求我们找到该问题的良好解决方案。

标签: regex string awk


【解决方案1】:

先入

substr($x, 0, 1) 

你最好使用

substr($x, 1, 1)

因为 awk 数组、字符串 idx 等都是从 1 开始的。 gawk 适用于 01 (甚至 -100) ,其他 awk 实现可能不适用于 0 情况(给你意想不到的价值)。

您可以使用正则表达式检查该字母范围,或者将它们与> or < 进行比较,例如:

awk 'BEGIN{s=substr($x,1,1);print (s>="A"&&s<="L")?"YES":"NO"}'

如果你想用正则表达式检查,你不需要substr()函数:

awk 'BEGIN{print ($x~/^[A-L]/)?"YES":"NO"}'

【讨论】:

    【解决方案2】:

    使用正则表达式匹配运算符~,就像substr($x,0,1)~/[A-L]/一样。

    $ cat file
    ABC
    DEF
    XYZ
    123
    
    $ awk 'substr($0,0,1)~/[A-L]/' file
    ABC
    DEF
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 2011-11-08
      • 1970-01-01
      • 2022-07-11
      • 2011-05-25
      • 2022-01-17
      • 2021-07-31
      • 2012-06-05
      相关资源
      最近更新 更多