我在Shell脚本中将变量的值与文件中的数千个值进行比较时遇到了问题。例如,假设我有一个可变
vel=8.14205
我有一个有四列的文件,但最重要的是前两列,
7.9 white 7.90001 white L
7.90001 white 7.90002 white L
7.90002 white 7.90003 white L
7.90003 white 7.90004 white L
7.90004 white 7.90005 white L
7.90005 white 7.90006 white L
7.90006 white 7.90007 white L
7.90007 white 7.90008 white L
7.90008 white 7.90009 white L
7.90009 white 7.9001 white L
7.9001 white 7.90011 white L
7.90011 white 7.90012 white L
7.90012 white 7.90013 white L
7.90013 white 7.90014 white L
.
.
.
8.05034 gray81 8.05035 gray81 L
8.05035 gray81 8.05036 gray81 L
8.05036 gray81 8.05037 gray81 L
8.05037 gray81 8.05038 gray81 L
8.05038 gray81 8.05039 gray81 L
8.05039 gray81 8.0504 gray81 L
8.0504 gray81 8.05041 gray81 L
8.05041 gray81 8.05042 gray81 L
8.05042 gray81 8.05043 gray81 L
8.05043 gray81 8.05044 gray81 L
8.05044 gray81 8.05045 gray81 L
.
.
.
8.69995 black 8.69996 black L
8.69996 black 8.69997 black L
8.69997 black 8.69998 black L
8.69998 black 8.69999 black L
8.69999 black 8.7 black B
如果在成千上万的线路中有一条线路带有
8.14205 gray84
那么我需要将其保存在另一个变量"中;gray84";。
有人知道我该怎么做?
我将非常感激!
如果使用问题中提供的示例数据并添加行8.14205 gray84
,则awk
选项可能为:
$ vel=8.14205
$ vel_color=$(awk -v vel="$vel" '{if ($1==vel) {print $2}}' src.dat)
$ echo "$vel_color"
gray84
使用存储在vel
变量中的值与第一个字段中的值进行比较。当有匹配时,打印第二个字段。