在UNIX系统中合并头文件、明细文件、尾文件并修正尾记录计数
如何在UNIX系统中合并并修正头/明细/尾文件内容?
这问题在批量处理文件的场景里挺常见的,用UNIX自带的shell工具就能轻松实现需求,给你两种实用的方案:
方案一:一行命令快速实现
如果只是临时操作、不需要复用,直接在终端执行这行命令就能得到想要的结果(结果会写入final.txt):
cat H.txt D.txt; echo "T $(wc -l < D.txt) $(cut -d' ' -f2- T.txt)" > final.txt
命令拆解:
cat H.txt D.txt:按顺序输出头文件和明细文件的全部内容wc -l < D.txt:统计明细文件的行数,用<重定向输入避免wc输出文件名,只返回纯数字的行数cut -d' ' -f2- T.txt:以空格为分隔符,提取尾文件中除第一个字段(T)之外的所有内容(也就是日期部分)echo把T、统计出的行数、日期拼接成修正后的尾行,最后将所有内容写入final.txt
方案二:编写可复用的shell脚本
如果需要重复执行这类操作,写个小脚本会更方便,比如创建merge_files.sh:
#!/bin/bash # 定义要处理的文件名,可根据实际情况修改 HEADER_FILE="H.txt" DETAIL_FILE="D.txt" TRAILER_FILE="T.txt" FINAL_FILE="final.txt" # 统计明细文件的行数 detail_line_count=$(wc -l < "$DETAIL_FILE") # 提取尾文件的非首字段内容(兼容尾行有多个字段的情况) trailer_content=$(cut -d' ' -f2- "$TRAILER_FILE") # 合并头文件和明细文件到最终文件 cat "$HEADER_FILE" "$DETAIL_FILE" > "$FINAL_FILE" # 追加修正后的尾行到最终文件 echo "T $detail_line_count $trailer_content" >> "$FINAL_FILE" echo "✅ 最终文件已生成:$FINAL_FILE"
使用步骤:
- 把上面的代码保存为
merge_files.sh - 给脚本添加执行权限:
chmod +x merge_files.sh - 运行脚本:
./merge_files.sh
两种方法都能完美生成你需要的最终文件内容,选适合你的场景用就行~
内容的提问来源于stack exchange,提问作者John Christopher
相关产品推荐
相关产品推荐

