Symbol Test
XXX,1
GHL,2
MKT,13
LOC,15
LMT,76
TIF,45
Сценарий оболочки должен возвратить соответствующий символ для каждого Теста.
Если $Test=1
, затем $symbol
должен быть XXX
как я могу достигнуть этого?
Можно использовать 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
Этому просто нужны определенные из awk
:
awk -v var=1 '$2 == var {print $1}' your_file
таким образом, ищите строки, имеющие 2-е поле, равное данной переменной var
; когда это произойдет, распечатайте первое поле.
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]