сценарий оболочки, чтобы отобразить поля и возвратить соответствующее значение из списка

Symbol  Test  
XXX,1  
GHL,2  
MKT,13  
LOC,15  
LMT,76  
TIF,45  

Сценарий оболочки должен возвратить соответствующий символ для каждого Теста.

Если $Test=1, затем $symbol должен быть XXX

как я могу достигнуть этого?

-1
задан 8 September 2015 в 01:17

3 ответа

Можно использовать 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
3
ответ дан 1 October 2019 в 02:10

Этому просто нужны определенные из awk:

awk -v var=1 '$2 == var {print $1}' your_file

таким образом, ищите строки, имеющие 2-е поле, равное данной переменной var; когда это произойдет, распечатайте первое поле.

1
ответ дан 1 October 2019 в 02:10

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]

0
ответ дан 1 October 2019 в 02:10

Другие вопросы по тегам:

Похожие вопросы: