По большей части этот код работает, у меня проблема в том, что я не знаю, как использовать ключ ассоциативных массивов и убедиться, что он совпадает с индексированным массивом. Например, код даст меню с городами, но с такими названиями, как «Атланта», но мне нужно сопоставить его в файле авиакомпании, поскольку он отображается как ATL. Они не будут напрямую соответствовать. Это главная проблема, которую я имею, я не знаю, как соединить два массива.
Также еще одной проблемой является то, что в файле Airlines есть дополнительный интервал табуляции. Я пытался это исправить, но все еще не идеально.
Действительно нужна помощь! Спасибо!
Постановка задачи:
Два файла, airlines
и cities
, содержат информацию о рейсах авиакомпаний из выбранных городов в
некоторые направления. Ваш скрипт должен определить список городов, в которых возможны выезды, и представить меню возможных названий городов:
Please select the departure city:
1) Atlanta 4) Denver 7) Las Vegas 10) San Francisco
2) Boston 5) Detroit 8) Los Angeles 11) Syracuse
3) Chicago 6) Houston 9) Pittsburgh
После того, как пользователь выберет город отправления, скрипт должен отобразить аналогичное меню возможных пунктов назначения. После выбора пункта назначения сценарий должен отобразить список всех рейсов из выбранного города отправления в
выбранный пункт назначения.
Ваш сценарий не должен жестко кодировать названия городов или аэропортов, а должен извлекать их из
файлы предоставляются.
Цель состоит в том, чтобы отобразить меню городов для отправления, а затем выбрать другое меню для пункта назначения. Затем эти два должны быть сопоставлены, чтобы найти, какие рейсы существуют.
#!/bin/bash
#cities=$1
#airlines=$2
OLDIFS=$IFS
IFS=$'\n'
PS3='Please select the departure city: '
cities=($(cut -f2 cities| sort -u))
select opt in "${cities[@]}"
do
case $opt in
"$opt") echo "$opt"
break;;
esac
done
cities=$opt
#need help with this part
declare -A city
city[ATL]=Atlanta
city[IAH]=Houston
city[DTW]=Detroit
city[LAS]="Las Vegas"
city[DEN]=Denver
city[PIT]=Pittsburgh
city[ORD]=Chicago
city[SFO]="San Francisco"
city[BOS]=Boston
city[SYR]=Syracuse
city[LAX]="Los Angeles"
city[DFW]=Dallas #not on list
airlines=($(cut -f4 $2 |sed -e 's/[[:space:]]\+/ /g' | sort -u ))
OLDIFS=$IFS
IFS=$'\n'
PS3='Select a destination: '
select option in "${airlines[@]}"
do
case $option in
"$option") echo "$option"
break;;
esac
done
IFS=$'\t'
while read -r A B C D E F G H
do
if [ $opt = $D ] && [ $option = $F ]; then
echo "Flight: $A $B $C $D $E $F $G $H"
else
echo "$A $B $C $D $E $F $G $H" > temp
check=($(wc -l temp))
#echo $check
if [[ $check = 0 ]]; then
echo "Sorry no flights are available"
fi
fi
done < $2
#rm temp
файл города
ATL Atlanta EST
DTW Detroit EST
IAH Houston CST
DFW Dallas CST
DEN Denver MST
LAX Los Angeles PST
SFO San Francisco PST
MSN Madison CST
BOS Boston EST
PIT Pittsburgh EST
ORD Chicago CST
SAN San Diego PST
LAS Las Vegas PST
SYR Syracuse EST
файл авиакомпании:
DL Delta 490 ATL 6:30a DTW 8:22a
DL Delta 738 ATL 8:25a DTW 10:10a
DL Delta 1221 ATL 9:45a DTW 11:33a
DL Delta 796 ATL 12:25p DTW 1:50p
DL Delta 1818 ATL 3:50p DTW 5:40p
DL Delta 546 IAH 6:10a ATL 9:06a
UA United 1000 IAH 7:05a ATL 10:03a
DL Delta 1032 IAH 9:30a ATL 12:19p
DL Delta 490 DTW 9:25a MSN 9:42a
DL Delta 1202 DTW 12:20p MSN 12:37p
DL Delta 163 DTW 7:25a ORD 7:44a
DL Delta 485 DTW 10:10p MSN 10:21p
UA United 1015 ATL 6:15a IAH 7:20a
DL Delta 1681 ATL 10:30a IAH 11:29a
UA United 1199 IAH 8:15a LAX 9:39a
UA United 535 IAH 2:25p LAX 3:54p
UA United 1683 LAS 8:00a SFO 9:46a
UA United 6659 LAS 4:29p SFO 6:09p
AA American 4055 ORD 8:44a MSN 9:39a
UA United 1522 DEN 12:20a SFO 2:00a
UA United 1521 DEN 11:30a SFO 1:10p
DL Delta 101 ATL 11:55a IAH 12:50p
US USAir 246 PIT 12:05p DFW 2:25p
US USAir 101 PIT 12:15a ORD 11:45p
US USAir 2966 LAS 10:20a SFO 11:54a
UA United 2578 SFO 8:39a SAN 10:07a
US USAir 2967 SFO 12:25p LAS 1:54p
AA American 111 ORD 12:34p LAX 2:50p
DL Delta 432 BOS 8:45a ATL 11:00a
AA American 2345 LAX 11:40p ORD 5:55a
DL Delta 2006 SYR 5:53p ATL 8:18p
AA American 3542 ORD 3:00p SYR 5:39p