Я пытаюсь написать программу с такими параметрами и аргументами:
./program.sh -f <filename> -string <string>
Программа должна выводить строку
, которая начинается с
вот так:
grep ^<string> <filename>
Плюс он должен возвращать некоторую информацию, связанную со строкой, например имя и возраст в следующем примере входного файла:
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
Как я могу добиться такого поведения?
Операция настолько проста, насколько это возможно, с помощью oneliner, для этого вам не нужен целый скрипт. Я бы пошел с функцией, которую вы можете поместить в ваш файл ~/.bash_aliases
, чтобы он загружался в каждый открытый вами терминал.
function_name(){ awk /^$2/'{print $1": "$2", "$3}' $1 ;}
Это позволяет вам позвонить function_name <filename> <string>
и получить результат, как показано ниже:
$ cat test
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
$ function_name test Akdk
Akdk: john, 22
Как видите, вы можете достичь этой цели без каких-либо опций, используя только аргументы. проще. Если вам как-то нужны варианты, я рекомендую этот учебник и эту статью .
function_name(){ … ;}
- определяет функцию function_name
, которая выполняет …
awk /^$2/'{…}' $1
- в файле, заданном в качестве первого аргумента функции ( $1
) найти строки, начинающиеся (^
) со второго аргумента ($2
) функции, и выполнить …
с ней awk '{print $1": "$2", "$3}'
- напечатать первый столбец (пробел) разделенный), затем «:», затем второй столбец, затем «,» и затем третий столбец Примечание: например, $1
имеет другое значение для bash
(который управляет вашим терминалом), как для awk
: первый расширяет его до первого аргумента, который вы ему дали, второй интерпретирует его как ярлык для первого столбца. Вот почему нам нужны одинарные кавычки ('
) вокруг команды awk
print
, поэтому bash
не раскрывает $1
, но позволяет нетронутому для awk
разбирать его.