首页 > 解决方案 > 使用数字列开始和结束分隔符对文件进行排序

问题描述

我有一个文件,我希望按第二列排序,问题是数据列包含空格。如何按第二列按字母顺序排序,然后按第三(数字)列排序?

我试过sort -k44,62了,没有得到预期的答案。即基于第2列的字母排序。

Starbucks                                     Seattle         291,000
Costco Wholesale                              Issaquah        245,000
Microsoft                                     Redmond         134,944
Barrett Business Services                     Vancouver       115,746
Nordstrom                                     Seattle         74,000
T-Mobile                                      Bellevue        51,000
The Hotel Group                               Edmonds         35,330
University of Washington                      Seattle         26,110
Fortive                                       Everett         26,000
Paccar                                        Bellevue        25,000
Providence Health & Services                  Renton          20,640
Expedia Group                                 Bellevue        20,075
Savers                                        Bellevue        20,000
Alaska Air Group                              Seattle         19,214
Expeditors                                    Seattle         17,400
MultiCare Health System                       Tacoma          17,000
Esterline Technologies                        Bellevue        12,000
Recreational Equipment                        Kent            12,000
Carrix                                        Seattle         11,000
Labor Ready                                   Tacoma          10,000
SSA Marine                                    Seattle         10,000
Nash Holdings                                 Seattle         10,000
Trident Seafoods                              Seattle         9,000
Eddie Bauer                                   Bellevue        8,000
Chief Seattle BSA                             Seattle         7,785
Laird Norton Co                               Seattle         7,500
Windermere Real Estate                        Seattle         7,000
Slalom                                        Seattle         7,000
PeaceHealth                                   Vancouver       6,690
Itron                                         Liberty Lake    6,200
TrueBlue                                      Tacoma          6,000
Nintendo                                      Redmond         5,944
JACK FROST FRUIT                              Yakima          3,000
YAKIMA REGIONAL MED CARDIAC CENT              Yakima          3,000
NORTH PUGET SOUND CENTER FOR SLEEP DISORDERS  Everett         2,500

标签: sortingunix

解决方案


选择数据中未出现的字段分隔符并处理字段 1:

sort -t '|' -k1.47,1.62 < f

还要对第三个逻辑字段进行数字排序:

sort -t '|' -k1.47,1.62 -k1.63n < f

不幸的是,如果所有值都不在 1,000 到 999,999 的范围内,则排序将中断。


推荐阅读