Symbol Test
XXX,1
GHL,2
MKT,13
LOC,15
LMT,76
TIF,45
Shell 脚本应该为每个测试返回相应的符号。
如果$Test=1
,那么$symbol
应该XXX
我怎样才能做到这一点?
答案1
您可以使用bash
关联数组:
declare -A foobar
while read -r foo bar; do foobar["$bar"]="$foo"; done < <(tail -n +2 file.txt)
这将生成一个关联数组,该数组foobar
通过从包含键值映射的文件中读取从第二行开始的行来命名。
现在您可以声明一个小函数,如:
choose () { echo "${foobar["$1"]}" ;}
它将输出作为第一个参数给出的指定键上存储的值。
例子 :
$ choose 2
GHL
$ choose 1
XXX
答案2
这只需要一点点awk
:
awk -v var=1 '$2 == var {print $1}' your_file
也就是说,查找第二个字段等于给定变量的行var
;当发生这种情况时,打印第一个字段。
答案3
Python 也可以完成这个工作:
python -c 'import sys;print [i.split(",")[0] for x,i in enumerate(sys.stdin) if x > 0 and i.strip().split(",")[1] == sys.argv[1]]' 13 < input.txt
或者作为实际脚本:
#!/usr/bin/env python
import sys
for x,i in enumerate(sys.stdin):
if x > 0 and i.strip().split(",")[1] == sys.argv[1]:
print i.strip().split(",")[0]
测试运行:
$ python find_line.py 76 < input.txt
LMT
其工作原理很简单:我们重定向input.txt
到脚本stdin
,然后逐行读取,跳过第一行并使用逗号将行拆分为列表。要查找的数字作为第一个命令行参数给出。
如果没有标题行,那就简单多了——这样可以消除enumerate()
调用,并简化行检查if i.strip().split(",")[1] == sys.argv[1]