合并同一唯一ID重复行并移除各列NULL值的实现方案问询
合并唯一ID行并移除NULL值的脚本方案
你需要将相同ID的多行数据合并为单行,同时去掉所有NULL值,下面是两种实用的实现方案:
方案1:使用Awk(适合Linux/Unix环境)
Awk是处理文本数据的利器,这个方案不需要额外安装工具,直接在终端就能运行。
脚本代码
BEGIN { FS = "|" # 设置分隔符为竖线 OFS = "|" # 输出分隔符也用竖线 print "ID|File1|File2|File3|File4" # 先打印表头 } NR > 1 { # 跳过表头行 id = $1 # 遍历每个File列,遇到非NULL值就更新对应存储的内容 for (i=2; i<=5; i++) { if ($i != "NULL ") { # 匹配原数据里带空格的NULL值 data[id][i] = $i } } } END { # 遍历所有ID,输出合并后的行 for (id in data) { printf "%s", id for (i=2; i<=5; i++) { printf "%s%s", OFS, data[id][i] } print "" } }
使用方法
假设你的原始数据保存在input.txt文件中,执行以下命令:
awk -f merge.awk input.txt
方案2:使用Python Pandas(适合数据处理场景)
如果你的环境有Python和Pandas库,这个方案更直观,适合处理更复杂的数据集。
脚本代码
import pandas as pd # 读取数据,自动处理分隔符前后的空格 df = pd.read_csv('input.txt', sep='|', skipinitialspace=True) # 按ID分组,每个列取第一个非空值(每个ID的非空值唯一,取任意非空值均可) merged_df = df.groupby('ID').agg(lambda x: x.dropna().iloc[0]).reset_index() # 输出结果,保持原始竖线分隔格式 merged_df.to_csv('output.txt', sep='|', index=False)
使用方法
- 先安装Pandas(如果未安装):
pip install pandas
- 将脚本保存为
merge.py,执行:
python merge.py
说明
两种方案都能精准实现需求:
- 对每个唯一ID,将所有行中对应列的非
NULL值合并到单行 - 彻底移除
NULL值,只保留有效文件名
内容的提问来源于stack exchange,提问作者Shannon Rogers
相关产品推荐
相关产品推荐

