Извлеките конкретную вещь из каждой строки в колонке

На этом форуме есть статья об отключении монитора. Эта статья идет дальше и обсуждает опцию vbetool.

# vbetool dpms off

Эта команда отключает монитор независимо от того, запущен X или нет. Итак, это почти тот ответ, который я искал. Теперь позвольте мне объяснить, что почти.

0
25.07.2018, 13:59
3 ответа

Кажется, это помогает:

$ sed -E 's/^([A-Z0-9]*).*(phNAME)'"'"': '"'"'([^'"'"']*).*/\1 \3/' input
ENSG00000268674 Strong inhibition of secretion
ENSG00000215268 Dynamic changes
ENSG00000130538 Intracellular retention of SH4(YES)-mCherry
0
28.01.2020, 02:42

Решение:

perl -lane 'print "$F[0] $_" for /'\''phNAME'\'': '\''([^'\'']+)/g' input.txt

Вывод:(на основе вашего опубликованного входного файла)

ENSG00000268674 Dynamic changes
ENSG00000268674 Strong inhibition of secretion
ENSG00000215268 Dynamic changes
ENSG00000130538 Intracellular retention of SH4(YES)-mCherry

Пояснение:

Подробное объяснение будет предоставлено по запросу.
По моему опыту, perlчасто является наиболее подходящим инструментом для такого рода задач.
Код выглядит довольно беспорядочно из-за '\'', который является просто экранированным '.

Рекомендация:

Если можете, избегайте возиться с данными jsonи анализируйте их с помощью jq, как уже было разумно предложено.

1
28.01.2020, 02:42

Другие решения подходят, если у вас всегда один и тот же формат и вы хотите извлечь только это единственное значение.

Если вам нужно больше гибкости для получения других данных, вы должны использовать формат данных json.


Решение Python:

import csv, demjson
with open('test') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ', quotechar='"')
    for row in reader:
        data = demjson.decode(row[1])
        for d in data:
            for pd in d['phenodata']:
                for pt in pd['phenotypes']:
                    phname = pt['phNAME']
                    print('%s %s' % (row[0],phname))

Выход:

ENSG00000268674 Dynamic changes
ENSG00000268674 Strong inhibition of secretion
ENSG00000215268 Dynamic changes
ENSG00000130538 Intracellular retention of SH4(YES)-mCherry

Поскольку ваша строка jsonнедействительна, мы не можем использовать модуль json.
У вас должен быть установлен модуль demjson:

# python3:
pip3 install demjson
# python2:
pip install demjson
0
28.01.2020, 02:42

Теги

Похожие вопросы