You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用awk按相同时间戳重排多文件数据的需求及问题

合并两个文件中同时间戳的数据集(Awk实现)

核心思路

用Awk数组存储每个时间戳对应的完整数据集(1行时间戳+5行关联数据),以14位时间戳为键,对应所有行内容为值。处理完两个文件后,按时间戳升序输出每个时间戳的所有对应数据集。

实现脚本

将以下代码保存为merge_ts.awk:

BEGIN {
    block_lines = 6  # 每个数据集总行数:1行时间戳 + 5行关联数据
}

# 匹配14位数字开头的时间戳行,标记当前处理的时间戳
/^[0-9]{14}$/ {
    current_ts = $0
    data[current_ts] = current_ts "\n"
    line_count = 0
    next
}

# 收集时间戳后的5行关联数据
current_ts != "" && line_count < block_lines - 1 {
    data[current_ts] = data[current_ts] $0 "\n"
    line_count++
    if (line_count == block_lines - 1) {
        current_ts = ""  # 收集完成,重置标记
    }
}

END {
    # 按时间戳字符串升序排序输出
    PROCINFO["sorted_in"] = "@ind_str_asc"
    for (ts in data) {
        printf "%s", data[ts]
    }
}

运行方式

在终端执行以下命令:

awk -f merge_ts.awk file1.txt file2.txt

测试示例

假设file1.txt内容:

20240520120000
data1-1
data1-2
data1-3
data1-4
data1-5
20240520130000
data2-1
data2-2
data2-3
data2-4
data2-5

file2.txt内容:

20240520120000
dataA-1
dataA-2
dataA-3
dataA-4
dataA-5
20240520140000
dataB-1
dataB-2
dataB-3
dataB-4
dataB-5

运行后输出:

20240520120000
data1-1
data1-2
data1-3
data1-4
data1-5
20240520120000
dataA-1
dataA-2
dataA-3
dataA-4
dataA-5
20240520130000
data2-1
data2-2
data2-3
data2-4
data2-5
20240520140000
dataB-1
dataB-2
dataB-3
dataB-4
dataB-5

内容的提问来源于stack exchange,提问作者Kay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:46:04