Как использовать текст, извлеченный из “ grep ” команда в качестве аргумента в сценарии bash?

У меня есть файл под названием «krylov_methods», который имеет такой текст:

cg     - preconditioned
cgne   - normal equations
nash   - cg subject to constraint
stcg   - another method for constraints
gmres  - general minimum residual
...

Мне нужно извлечь первое слово (строку символов) каждой строки, один за другим, в оболочку скрипт и использовать его в качестве аргумента командной строки в этом скрипте. Чтобы извлечь первое слово, я использовал следующую команду:

head -1 krylov_methods | tail -1 | awk '{print $1}'
head -2 krylov_methods | tail -1 | awk '{print $1}'
head -3 krylov_methods | tail -1 | awk '{print $1}'
...

Кажется, что это хорошо работает для извлечения первого слова каждой строки по одному. Однако мне нужно иметь возможность хранить строку символов как переменную для будущего использования в скрипте. Например, поскольку первым словом первой строки файла «krylov_methods» является слово «cg», я хочу иметь возможность хранить «cg» для переменной «метод». Внутри скрипта я хотел бы получить что-то вроде:

method=cg  
./execute $method  

Возможно ли сохранить результат команды «head», используемой в сценарии оболочки?

1
задан 15 July 2013 в 22:04

2 ответа

Собственно, после некоторых экспериментов я понял:

method=$(head -$i krylov_methods | tail -1 | awk '{print $1}')
execute $method
0
ответ дан 25 May 2018 в 14:48

Нет необходимости использовать оба head и tail. AWK может печатать строку, о которой вы говорите, довольно легко

$> awk -v LINE=5  'NR==LINE' /etc/passwd                                                                              
sync:x:4:65534:sync:/bin:/bin/sync

Вы можете превратить это в функцию в свой скрипт bash (не забудьте указать полный или частичный путь к файлу, если он имеет пробелы или специальные символы):

print_line_number() {
    awk -v LINE="$1" "NR==LINE" "$2" 
}

И здесь он находится в действии

$> print_line_number 5 /etc/passwd                                                                                    
sync:x:4:65534:sync:/bin:/bin/sync
0
ответ дан 25 May 2018 в 14:48

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

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