首页 > 解决方案 > 用awk,egrep查找后如何比较数字

问题描述

我有一些 file.txt,其中有很多信息。文件中的输入如下所示:

<ss>283838<ss>
.
.
<ss>111 from 4444<ss>
.
<ss>255<ss>
这些数字可以有任意位数。

  1. 我需要找到并比较这两个数字
  2. 如果它们相等,则打印文件的名称,如果不相等,则打印它们相等,则反向含义。文件中只有一个字符串的数字带有“from”字样, 我试图这样做

Awk '/[0-9]+ from./ {print $0} file.txt | egrep -o '[0-9]+'

使用此命令,我得到了这两个数字,但我现在堆叠起来,不知道如何比较它们

标签: awkgrep

解决方案


使用您显示的示例,您能否尝试以下操作。简单的解释是:通过正则表达式获取各自的数字值,然后比较它们以检查 3 种情况,它们是否大于、小于或等于彼此,将在某个时候添加详细说明。

awk '
match($0,/<[a-zA-Z]+[0-9]+/){
  val1=substr($0,RSTART,RLENGTH)
  gsub(/[^0-9]*/,"",val1)
  match($0,/[0-9]+[a-zA-Z]+>/)
  val2=substr($0,RSTART,RLENGTH)
  gsub(/[^0-9]*/,"",val2)
  if(val1>val2){
     print "val1("val1 ")is  Greater than val2("val2")"
  }
  if(val2>val1){
     print "val2("val2 ")is  Greater than val1("val1")"
  }
  if(val1==val2){
     print "val1("val1 ")is equals to val2("val2")"
  }
}' Input_file

对于您当前显示的示例输出将如下所示:

val2(333)is  Greater than val1(222)

推荐阅读