【问题标题】:Compare value with 1st and 2nd column print corresponding 3rd column将值与第 1 列和第 2 列打印对应的第 3 列进行比较
【发布时间】:2015-12-30 06:45:56
【问题描述】:

我有这样的文件

01 10 a
11 20 b
21 30 c
31 40 d
41 50 e

我想输入一个数字并与第 1 列和第 2 列进行比较并打印相应的第 3 列

例如如果我输入 23 它应该显示 c,如果我输入 45 它应该显示 e

【问题讨论】:

  • 如果输入“1”和“01”会怎样?您是否在寻找字符串或 RE 或数字比较?你的比较是相等还是大于或等于或其他?

标签: unix awk numbers


【解决方案1】:

egrep "^${DIGIT_1}[0-9] ${DIGIT_2}[0-9]" file | awk '{print $3}'

DIGIT_1 在您的示例中是 2DIGIT_23

【讨论】:

    【解决方案2】:

    使用这个简单的脚本

    #!/bin/sh
    echo "Enter the number"
    read num
    while read line
    do
    set -- $line
    
        if [ $num -ge $1 ] && [ $num -le $2 ] ;then
                echo $3
                exit 1
        fi
    done < filename
    echo "not found"
    

    【讨论】:

      【解决方案3】:

      另一种 awk 方法

      awk -v d=<yournumber> '{dt=int(d/10);du=d-dt*10;c1=int($1/10);c2=int($2/10);if(dt==c1&&du==c2)print $3}' <yourfile>
      

      【讨论】:

      • 我假设第一列中的个位不必总是 0;第 2 列类似
      【解决方案4】:

      在一个简单的 脚本中:

      % awk -vfirst=2 -vsecond=3 '
      $1 ~ first && $2 ~ second { print $3 }
      ' file-like-this
      c
      

      % awk -vfirst=4 -vsecond=5 '
      $1 ~ first && $2 ~ second { print $3 }
      ' file-like-this
      e
      

      您可以通过awk 来确定数字的第一位和第二位,如下所示:

      % awk -vnumber=45 '
      BEGIN { first = int(number / 10); second = number % 10 }                           
      $1 ~ first && $2 ~ second { print $3 }
      ' file-like-this
      e
      

      【讨论】:

        【解决方案5】:

        简单的awk 方法

        cat file
        01 10 a
        11 20 b
        21 30 c
        31 40 d
        41 50 e
        


        i=40
        


        awk 'inp<=$2 {f=$3;exit} END {print $3}' inp=$i file
        d
        

        【讨论】:

        • “a b c d e”也在输入文件中。
        猜你喜欢
        • 1970-01-01
        • 2019-03-30
        • 2019-09-12
        • 2021-10-11
        • 2018-06-13
        • 2015-11-04
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        相关资源
        最近更新 更多