嗨,我正在使用 bash 脚本,下面有 example.txt。如何按餐厅名称将以下4个餐厅信息按字母顺序排列并打印出来?请注意,按字母顺序打印时的格式应与以下相同,包括城市、州、地址、电话。
Restaurant: McDonalds
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 91341
Restaurant: Five guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 9234211
Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 95311
Restaurant: Taco Bell
City: LA
State: CA
Address: 123 Rodeo Drive
Phone: 911
Run Code Online (Sandbox Code Playgroud)
这是使用的解决方案awk:
$ awk 'BEGIN{FS="\n";RS=""} {r[$1]=$0} END{n = asort(r); for (i=1;i<=n;i++){print r[i] "\n"}}' restaurants
Restaurant: Five guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 9234211
Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 95311
Restaurant: McDonalds
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 91341
Restaurant: Taco Bell
City: LA
State: CA
Address: 123 Rodeo Drive
Phone: 911
Run Code Online (Sandbox Code Playgroud)
awk一次读入文件一条记录。我们定义记录分隔符,RS到是""让记录由一个空行分隔。所有的记录都被读入一个数组r。最后,对数组r进行排序和打印。
正如@Sadi 在评论中指出的那样,该awk命令适用于管道:
cat restaurants | awk 'BEGIN{FS="\n";RS=""} {r[$1]=$0} END{n = asort(r); for (i=1;i<=n;i++){print r[i] "\n"}}' >sorted_list_of_restaurants
Run Code Online (Sandbox Code Playgroud)