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

Bash脚本需求:合并多TXT文件并添加ID与会话列

解决多TXT文件合并为三列格式的问题

我懂你的痛点——现在你要把多个单列的TXT文件合并成包含人员ID、会话编号、数值的三列格式,但当前脚本只在每个文件的第一行带上前两列,后面的行都缺失了这两个关键信息对吧?

问题出在你的脚本只给每个文件的第一行添加了ID和会话号,而正确的逻辑应该是给每个文件的每一行都重复对应的人员ID和会话编号,毕竟整个文件都是属于同一个人员同一会话的数据。

下面给你两种常用的解决方案,你可以根据自己的环境选择:

方案一:Python脚本(灵活易调整)

如果你的文件名能体现人员ID和会话编号(比如person_1_session_1.txt),可以用这个自动提取的版本:

import os

# 请替换成你的TXT文件存放目录
input_directory = "./your_txt_files_folder"
# 合并后的输出文件名
output_filename = "merged_data.txt"

with open(output_filename, "w", encoding="utf-8") as output_file:
    # 遍历目录下所有TXT文件
    for file_name in os.listdir(input_directory):
        if not file_name.endswith(".txt"):
            continue  # 跳过非TXT文件
        
        # 从文件名提取人员ID和会话编号,这里假设文件名格式是person_{ID}_session_{会话号}.txt
        # 如果你文件名格式不同,修改这里的拆分逻辑就行
        name_parts = file_name.replace(".txt", "").split("_")
        person_id = name_parts[1]
        session_number = name_parts[3]
        
        # 读取当前文件的每一行,拼接三列内容写入
        with open(os.path.join(input_directory, file_name), "r", encoding="utf-8") as input_file:
            for line in input_file:
                value = line.strip()
                if value:  # 跳过空行
                    output_file.write(f"{person_id} {session_number} {value}\n")

如果你的文件名没有规律,那就手动指定每个文件对应的ID和会话号:

# 手动映射:(文件名, 人员ID, 会话编号)
file_mappings = [
    ("userA_session1.txt", "1", "1"),
    ("userA_session2.txt", "1", "2"),
    ("userB_session1.txt", "2", "1"),
    # 继续添加其他文件
]

output_filename = "merged_data.txt"

with open(output_filename, "w", encoding="utf-8") as output_file:
    for file_name, pid, sid in file_mappings:
        with open(file_name, "r", encoding="utf-8") as input_file:
            for line in input_file:
                value = line.strip()
                if value:
                    output_file.write(f"{pid} {sid} {value}\n")

方案二:Bash Shell脚本(适合Linux/macOS环境)

如果你习惯用命令行,这个脚本更快捷:

# 假设你的文件命名格式是personX_sessionY.txt,X是人员ID,Y是会话号
# 合并后的输出文件
output_file="merged_data.txt"

# 清空输出文件(避免重复追加)
> "$output_file"

# 遍历所有目标TXT文件
for txt_file in person*.txt; do
    # 从文件名提取人员ID和会话编号
    person_id=$(echo "$txt_file" | cut -d'_' -f2)
    session_num=$(echo "$txt_file" | cut -d'_' -f3 | sed 's/.txt//')
    
    # 给每一行添加前缀并写入输出文件
    awk -v pid="$person_id" -v sid="$session_num" '{print pid, sid, $0}' "$txt_file" >> "$output_file"
done

关键注意点

  • 一定要根据你自己的实际文件名格式调整ID和会话号的提取逻辑,不然会出错
  • 如果你的TXT文件里有空行,代码里的if value:(Python)会自动跳过,避免生成无效行
  • 合并后的文件会严格按照你期望的格式:1 1 000、1 1 001...1 2 177这样的顺序排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:55:45