У меня есть несколько тысяч файлов журнала (.txt) (их имена или порядок не имеют значения, равно как и порядок записей в конечных выходных файлах), которые состоят из метки времени Unix и значения, такого как:
infile1.txt:
1361775157 a
1361775315 b
1379007707 c
1379014884 d
infile2.txt:
1360483293 e
1361384920 f
1372948120 g
1373201928 h
Моя цель - разделить их на произвольно заданные интервалы времени (например, в данном случае с 1360000000, 1370000000 и 1380000000 в качестве границ), чтобы я получил столько файлов, сколько интервалов:
1360000000-1370000000.txt:
1361775157 a
1361775315 b
1360483293 e
1361384920 f
1370000000-1380000000.txt:
1379007707 c
1379014884 d
1372948120 g
1373201928 h
Мой текущий подход заключается в запуске сценария, который фильтрует записи каждого периода в цикле для каждого периода времени (начало и конец в качестве первого и второго аргумента) и добавляет их в файл:
#!/bin/bash
for i in *txt; do
awk -v t1=$1 -v t2=$2 '$1 >= t1 && $1 < t2' $i >> "elsewhere/$1-$2.txt"
done
Однако это означает, что за каждый период времени все файлы читаются, что мне кажется неэффективным. Есть ли способ прочитать каждый файл только один раз и добавить каждую строку в файл, соответствующий его периоду времени?