Позвольте мне еще раз сформулировать вашу проблему. Вы действительно хотите сделать две операции:
transcr*
)строки по номеру в строке, сохраняя четные -пронумерованные(Y*
)строки, связанные с предыдущей строкой Y*
строки, подпадающие под одинаковые transcr*
строки Хотя я восхищаюсь однострочными решениями -в других ответах, я думаю, что это достаточно сложно, чтобы написание сценария могло быть оправдано. Кроме того, после сохранения сценария в файле его можно повторно использовать и улучшать по мере изменения ваших потребностей.
Этот скрипт примет ваш ввод и создаст строки, идентичные вашему окончательному выводу:
#!/bin/env python
from collections import defaultdict
import fileinput
import re
def pair_lines (iterable):
''' Return lines two at a time '''
args = [iterable] * 2;
return zip(*args)
dd = defaultdict(list)
for line1,line2 in pair_lines(fileinput.input()):
# accumulate lists of all second lines that share the same first
# line value
dd[line1].append(line2)
def line_index (line):
''' Return first substring that looks like an integer '''
return int(re.search(r'\d+',line).group(0))
# sort by first lines and print results
for line1 in sorted(dd.keys(), key=line_index):
print(line1, *dd[line1], end='', sep='')
Выполнить с помощью:
reorder.py input.txt > output.txt
Судя по всему, OpenJDK 7 и 8 названыicedtea
:
$ guix environment --ad-hoc icedtea --pure
$ java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (IcedTea 3.7.0) (guix build 1.8.0_161-b12)
OpenJDK 64-Bit Server VM (build 25.161-b12, mixed mode)