Как получить определенные значения из файла .dat через параметр? - PullRequest
0 голосов
/ 24 марта 2020

Итак, у меня есть файл .dat, который содержит идентификатор человека, имя, фамилию, место, где он / она живет ... пример:

0 Алекс Брукс Конвей 312 Шотландия

Мне нужно сделать флаг -search, который будет принимать дополнительные параметры -name -surname и выводить (выводить) только людей, которые соответствуют условиям.

Так, например:
-search -name "Alex" -surname "Brooks"
, и он распечатает всех, кто соответствует этим флагам.

Я немного растерялся, потому что я мог сделать это с помощью awk или grep, но я не уверен, что лучше и как именно это сделать

1 Ответ

0 голосов
/ 25 марта 2020

Вот скрипт bash, который может делать то, что вы хотели. В этом примере имя myscript.

#!/usr/bin/env bash

##: Initialize the variables
name=
file=
surname=

##: If there are no options/arguments given
[[ $1 ]] || { echo "Give me something!" >&2
  printf '%s\n' "Usage: -s|--surname -n|--name -f|--file" >&2
  exit 1
}

##: loop through the options/arguments

while (($#)); do
  case $1 in
    -n|--name)
      shift
      name=$1
      ;;
    -s|--surname)
      shift
      surname=$1
      ;;
    -f|--file)
      shift
      file=$1;;
    *)
      printf 'Illegal option! %s\n' "$1"  >&2
      printf '%s\n' "Usage: -s|--surname -n|--name -f|--file" >&2
      exit 1;;
  esac
  shift
done

##: If no file what given
if [[ -z $file  ]]; then
  echo "No file given!" >&2
  exit 1
fi

##: Loop through the file line-by-line and check for a match
##: You should be using awk here but I'll leave that to the awk masters :-)

while read -ra line; do
  if [[ ${line[@]} == *" $name $surname "* ]]; then
    if [[ $name == ${line[1]} && $surname == ${line[2]} ]]; then
      printf '%s\n' "${line[*]}"
      exit 0
    fi
  else
     printf '%s %s was not found!\n' >&2 "$name" "$surname"
     exit 1
  fi
done < "$file"

Howto use

./myscript -n Alex -s Brooks -f file.dat

Или с использованием длинных опций

./myscript --name Alex --surname Brooks --file file.dat
  • Need дополнительное тестирование и проверка ошибок, например, если данный файл был не файлом, а каталогом и т. д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...