【发布时间】:2018-05-04 00:44:08
【问题描述】:
在大多数情况下,此代码有效,我遇到的问题是我不知道如何使用关联数组的键并确保它与索引数组匹配。例如,代码将给出一个带有城市但名称如“亚特兰大”的菜单,但我需要在航空公司的文件中匹配它,因为它显示为 ATL。他们不会直接匹配。这是我的主要问题我不知道如何使两个阵列连接。 另一个问题是航空公司文件有额外的制表符间距。我试图修复它,但仍然不完美。
真的需要帮助!谢谢! 问题陈述:
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
【问题讨论】:
-
你应该从文件中填写
cities数组,而不是硬编码。 -
citiies文件是否真的使用空格作为字段之间的分隔符,即使城市名称中也可以包含空格?还是它使用不同的字段分隔符,例如 TAB? -
是的,但我和我的教授谈过,他说我应该这样做,但如果你有更好的方法也可以
-
城市文件只有空格,航空公司有标签等
-
你确定吗?时区的排列方式看起来像是使用具有 4 列选项卡设置的选项卡。