Я хотел бы извлечь несколько строк данного файла с помощью сценария оболочки. Проблема в том, что у меня есть набор файлов, которые нужно проанализировать и извлечь данные. Приведенные ниже примеры объясняют мой сценарий: я ищу ...

0
BigD 12 Янв 2021 в 20:39

1 ответ

Лучший ответ

Если вы можете изменить список на допустимый формат json (как показано ниже) и python - ваш вариант, Пожалуйста попробуйте:

#!/usr/bin/python

lists = [
{
"name" : "Account - UU",
"source" : "1-account",
"destination" : "account-hhh",
"other" : 111111
},
{
"name" : "Account - PP",
"source" : "2-account",
"destination" : "account-hhh12345",
"other" : 1212
},
{
"name" : "Account - GG",
"source" : "3-account",
"destination" : "account-gg567",
"other" : 44444
},
{
"name" : "Account - QQ",
"source" : "4-account",
"destination" : "account-manager123456",
"other" : 23232323
}
]

for i in lists:
    print('source = "%s" | destination = "%s"' % (i["source"], i["destination"]))

Выход:

source = "1-account" | destination = "account-hhh"
source = "2-account" | destination = "account-hhh12345"
source = "3-account" | destination = "account-gg567"
source = "4-account" | destination = "account-manager123456"

ИЗМЕНИТЬ

Предположим, у вас есть файл HOCON file.conf, который выглядит так:

lists = [
{
name = "Account - UU",
source = "1-account",
destination = "account-hhh",
other = 111111
},
{
name = "Account - PP",
source = "2-account",
destination = "account-hhh12345",
other = 1212
},
{
name = "Account - GG",
source = "3-account",
destination = "account-gg567",
other = 44444
},
{
name = "Account - QQ",
source = "4-account",
destination = "account-manager123456",
other = 23232323
}
]

Затем попробуйте выполнить скрипт python:

#!/usr/bin/python

from pyhocon import ConfigFactory

conf = ConfigFactory.parse_file('./file.conf')
for i in conf['lists']:
    print('source = "%s" | destination = "%s"' % (i['source'], i['destination']))

Выход:

source = "1-account" | destination = "account-hhh"
source = "2-account" | destination = "account-hhh12345"
source = "3-account" | destination = "account-gg567"
source = "4-account" | destination = "account-manager123456"

EDIT2

Если вы хотите рекурсивно анализировать несколько файлов в нескольких каталогах, сохраните следующий сценарий как что-то вроде myscript.py:

#!/usr/bin/python

from pyhocon import ConfigFactory
import sys

conf = ConfigFactory.parse_file(sys.argv[1])
try:
    if type(conf['lists']) is list:
        for i in conf['lists']:
            print('source = "%s" | destination = "%s"' % (i['source'], i['destination']))
except Exception:
    pass

Затем запустите:

find "$dir" -name "*.conf" -type f -exec python myscript.py {} \;

Командная строка выше предполагает, что файлы HOCON имеют расширение .conf, а переменная $dir содержит путь к верхнему каталогу файлов conf. Измените их в соответствии с вашей средой.

РЕДАКТИРОВАТЬ3
Приведенный выше сценарий python может быть изменен:

#!/usr/bin/python

from pyhocon import ConfigFactory
import sys

conf = ConfigFactory.parse_file(sys.argv[1])
if 'lists' in conf.keys():
    for i in conf['lists']:
        print('source = "%s" | destination = "%s"' % (i['source'], i['destination']))

Что будет немного умнее.

1
tshiono 15 Янв 2021 в 02:06