sorting - 使用数字列开始和结束分隔符对文件进行排序
问题描述
我有一个文件,我希望按第二列排序,问题是数据列包含空格。如何按第二列按字母顺序排序,然后按第三(数字)列排序?
我试过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
解决方案
选择数据中未出现的字段分隔符并处理字段 1:
sort -t '|' -k1.47,1.62 < f
还要对第三个逻辑字段进行数字排序:
sort -t '|' -k1.47,1.62 -k1.63n < f
不幸的是,如果所有值都不在 1,000 到 999,999 的范围内,则排序将中断。
推荐阅读
- sql - SQL 如何正确创建汇总表?
- laravel-5 - Laravel 5 获取响应头
- java - 终止线程的更复杂的方法(守护线程或 Thread.interrupt())
- node.js - 使用 NodeJs Express Web 框架在 Rest API 中使用 AWS Secrets Manager 进行密码轮换的最佳实践
- c++ - 如何将对象插入地图以使地图获得所有权?安置?
- react-native - 使用 axios 反应本机 - 使用自签名 https 端点调用 localhost 的网络错误
- json - 使用 Swift 解码器协议解码 JSON 时遇到问题
- python - 将所有 xarray 数据集值替换为常量
- reactjs - 如何将状态数据从自定义钩子传递到反应组件?
- flutter - 如何使用 dart/flutter 将数字格式化为数千、数百万和数十亿?