У меня есть фрагменты данных, распределенные по 100 файлам, которые при повторной сортировке следуют числовой последовательности. Например, если у меня есть 100 блоков данных, блок № 1, 3, 5 может быть в одном файле, а блок № 2, 4, 6 может быть в другом. Мне нужно создать 1 выходной файл со всеми кусками в последовательном порядке: # 1,2,3,4,5,6.
Ниже приведена сокращенная версия 2 (из 100) входных файлов. Каждый фрагмент начинается с «ITEM: TIMESTEP» и должен быть упорядочен по номеру в следующей строке (здесь это 1000, 2000, 3000, 4000).
ВХОДНОЙ ФАЙЛ 1
ПУНКТ: TIMETEP
1000
ПУНКТ: ЧИСЛО АТОМОВ
50 2 H 0,4 0,3 0,006
10214 2 H 0,5 0,4 0,002
...... # 12 000 строк спустя # ...
ПУНКТ: TIMETEP
3000
ПУНКТ: ЧИСЛО АТОМОВ
50 2 H 2,3 1,4 0,3
10214 2 H 2,5 1,3 0,6
...... # 12 000 строк спустя # ...
ВХОДНОЙ ФАЙЛ 2
ПУНКТ: TIMETEP
2000
ПУНКТ: ЧИСЛО АТОМОВ
50 2 H 0,4 0,3 0,006
10214 2 H 0,5 0,4 0,002
...... # 12 000 строк спустя # ...
ПУНКТ: TIMETEP
4000
ПУНКТ: ЧИСЛО АТОМОВ
50 2 H 2,3 1,4 0,3
10214 2 H 2,5 1,3 0,6
...... # 12 000 строк спустя # ...
Конечный выходной файл будет выглядеть так
ПУНКТ: TIMETEP
1000
.... # остаток чанка # ...
ПУНКТ: TIMETEP
2000
.... # остальная часть куска # ...
ПУНКТ: TIMETEP
3000
.... # остальная часть куска # ...
ПУНКТ: TIMETEP
4000
.... # остальная часть куска # ...
До сих пор я вставлял строку идентификатора с именем «IDENTIFIER» перед началом каждого блока:
awk -v n=12,000 '1; NR%n==0 {print "IDENTIFIER"}' in.txt >> out1.txt
И я могу напечатать N строк, необходимых для каждого чанка, который следует за каждой строкой идентификатора, с циклическим просмотром нескольких файлов
for i in $(seq 1000 1000 10000); do
awk 'c&&c--;/IDENTIFIER/{c=12,000}' out${i}.txt >> out-final.txt
done
Я использовал этот метод, чтобы специально идентифицировать 2-й ряд каждого чанка, потому что эти числа могут повторяться внутри самого чанка. Однако я не знаю, как изменить вторую командную строку, чтобы она выводилась только в out-final.txt, когда значение после IDENTIFIER является следующим числом в последовательности.