You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用命令行合并TXT文件并添加文件的日期时间

合并单行TXT并添加源文件时间戳的命令行方案

嘿,我懂你想要的效果了!把一堆只有一行内容的TXT文件合并成一个,还得给每行加上对应源文件的日期时间,其实把你手里的两个逻辑拼起来就搞定了,我给你几个实用的命令行方案,适配不同的操作系统:

方案1:Bash遍历+stat获取时间(Linux/Git Bash适用)

这个方法直观,逐个处理每个TXT文件,先拿时间再拼内容:

# 先清空目标文件(如果之前有生成过的话)
> merged_output.txt

# 遍历当前目录下所有txt文件
for file in *.txt; do
    # 获取文件的修改时间,格式为「YYYY-MM-DD HH:MM:SS」
    file_timestamp=$(stat -c "%y" "$file" | cut -d' ' -f1,2)
    # 把时间戳和文件内容拼接后追加到合并文件
    echo "$file_timestamp | $(cat "$file")" >> merged_output.txt
done
  • stat -c "%y":获取文件的修改时间(包含日期、时间和时区)
  • cut -d' ' -f1,2:截取前两部分,去掉时区信息,你也可以根据需求调整格式
  • echo ... >>:把拼接好的内容追加到目标文件,避免覆盖之前的内容

方案2:适配macOS的Bash版本

macOS的stat命令参数和Linux不一样,得换成下面的写法:

> merged_output.txt

for file in *.txt; do
    # macOS下获取格式化后的修改时间
    file_timestamp=$(stat -f "%Sm" -t "%Y-%m-%d %H:%M:%S" "$file")
    echo "$file_timestamp | $(cat "$file")" >> merged_output.txt
done
  • stat -f "%Sm":指定获取修改时间
  • -t "%Y-%m-%d %H:%M:%S":自定义时间格式,你可以改成自己需要的样式(比如只保留日期%Y-%m-%d

方案3:用Awk一键处理(更简洁)

如果觉得循环写起来麻烦,用Awk可以一步到位,Linux和macOS都能用(注意macOS要调整stat命令):

# Linux/Git Bash版本
awk '{
    cmd = "stat -c \"%y\" " FILENAME
    cmd | getline timestamp
    close(cmd)
    split(timestamp, t_arr, " ")
    print t_arr[1] " " t_arr[2] " | " $0
}' *.txt > merged_output.txt

# macOS版本
awk '{
    cmd = "stat -f \"%Sm\" -t \"%Y-%m-%d %H:%M:%S\" " FILENAME
    cmd | getline timestamp
    close(cmd)
    print timestamp " | " $0
}' *.txt > merged_output.txt

Awk会自动遍历所有指定的TXT文件,FILENAME变量代表当前处理的文件名,通过执行stat命令拿到时间戳后和当前行内容拼接输出。

你可以根据自己的操作系统选对应的命令,要是想调整时间格式,直接修改stat里的格式参数就行~

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

火山引擎 最新活动