【发布时间】: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 或数字比较?你的比较是相等还是大于或等于或其他?
我有这样的文件
01 10 a
11 20 b
21 30 c
31 40 d
41 50 e
我想输入一个数字并与第 1 列和第 2 列进行比较并打印相应的第 3 列
例如如果我输入 23 它应该显示 c,如果我输入 45 它应该显示 e
【问题讨论】:
egrep "^${DIGIT_1}[0-9] ${DIGIT_2}[0-9]" file | awk '{print $3}'
DIGIT_1 在您的示例中是 2 和 DIGIT_2 是 3
【讨论】:
使用这个简单的脚本
#!/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"
【讨论】:
另一种 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>
【讨论】:
在一个简单的awk 脚本中:
% 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
【讨论】:
简单的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
【讨论】: