linux - 连接以时间戳命名的数据文件

标签 linux bash join sed timestamp

在一个目录中,我有一系列文件名附加了时间戳的数据文件,例如 file-13-57-38-876.txtfile-13- 57-59-288.txtfile-13-58-19-700.txt 等,其中时间以小时-分钟-秒-毫秒的形式列出。每个文件的格式基本如下:

Some preamble text
that takes up a few lines
0.000 1.000
0.200 0.900
0.400 0.800
0.600 0.700
0.800 0.600
1.000 0.500

每个文件都包含相同 x 坐标的点,所以我想将所有文件中的数据(可能使用 join)连接到一个文件 alldata.txt 包含许多列,每个文件按顺序列一列。使用 sed -i '/^[0-9]/!d' *.txt 剥离所有非数字数据应该很简单,但我不确定最简单的方法是通过这些文件,由于名称中时间戳的不规则性,一路将它们连接在一起。有没有一种方法可以根据它们在目录中的“字母顺序”外观将这些文件逐一传递给 join

最佳答案

如果输入文件像您所说的那样规则 - 相同顺序的相同 x 坐标 - 您可以尝试一些 bash 进程替换和脚本重新调用:

#!/bin/bash

process() { exec sed -n '/^[0-9]/p' "$1"; }

[ $# -eq 0 ] && exit
[ $# -eq 1 ] && { process "$1"; exit; }

fn="$1"; shift
join <(process "$fn") <("$0" "$@")

If the above is saved as "join_em.sh", see how:

./join_em.sh file-*.txt

为你工作。

如果您要处理成百上千个输入文件,请多加注意。

关于linux - 连接以时间戳命名的数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329028/

相关文章:

sql - INNER JOIN ON 与 WHERE 子句

Bash,参数列表段

bash - 使用 GNU parallel 对单个操作进行计时

c - malloc 双重释放行为

swift - NSString.appendingPathComponent(_ :) not working correctly on Linux

linux - 编写修改 gcc c 编译器的 bash 脚本

php - MySQL Issue join table with two columns against one

java - 线程从生成线程继承锁

php - 如何在 PHP 中更改 IP 地址

c# - 如何在 C# Mono 中执行 Linux 命令行