需求:将单条女性姓名数据调换至两条男性姓名数据之间
问题描述
需要将单条女性性别数据调整至两条男性性别数据之间,具体输入输出如下:
输入数据
Id Name Sal Gender 1 AA 2000 M 2 BB 1500 M 3 CC 3000 F
期望输出
Id Name Sal Gender 1 AA 2000 M 3 CC 3000 F 2 BB 1500 M
解决方案
1. SQL实现(以MySQL为例)
通过自定义排序规则,让第一条男性数据先输出,接着是女性数据,最后是第二条男性数据:
SELECT Id, Name, Sal, Gender FROM your_table ORDER BY -- 优先排序男性,再排女性 CASE Gender WHEN 'M' THEN 0 ELSE 1 END, -- 让Id=1的男性排在Id=2的男性之前,女性插在中间 CASE WHEN Id = 2 THEN 2 ELSE 1 END;
2. 文本文件处理(用awk脚本)
如果是处理纯文本格式的数据,可以用awk脚本实现:
# 打印表头 NR == 1 { print; next } # 先打印第一条男性数据 $4 == "M" && $1 == 1 { print; mark = 1 } # 当已打印第一条男性后,打印女性数据 $4 == "F" && mark { print; mark = 0 } # 最后打印第二条男性数据 $4 == "M" && $1 == 2 { print }
内容的提问来源于stack exchange,提问作者giridaran l
相关产品推荐
相关产品推荐

