在一个目录中,我有一系列文件名附加了时间戳的数据文件,例如 file-13-57-38-876.txt
、file-13- 57-59-288.txt
、file-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/