Konvertieren Sie eine Textdatei in eine INI-Datei mit Parametern und Werten

Konvertieren Sie eine Textdatei in eine INI-Datei mit Parametern und Werten

Wir haben die folgende Textdatei, dies ist die Konfigurationsdatei:

advertised.host.name: DEPRECATED: only used when advertised.listeners or listeners are not set. Use advertised.listeners instead. Hostname to publish to ZooKeeper for clients to use. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, it will use the value for host.name if configured. Otherwise it will use the value returned from java.net.InetAddress.getCanonicalHostName().

    Type: string
    Default: node1
    Valid Values:
    Importance: high
    Update Mode: read-only

advertised.listeners: Listeners to publish to ZooKeeper for clients to use, if different than the listeners config property. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, the value for listeners will be used. Unlike listeners it is not valid to advertise the 0.0.0.0 meta-address.

    Type: string
    Default: null
    Valid Values:
    Importance: high
    Update Mode: per-broker

advertised.port: DEPRECATED: only used when advertised.listeners or listeners are not set. Use advertised.listeners instead. The port to publish to ZooKeeper for clients to use. In IaaS environments, this may need to be different from the port to which the broker binds. If this is not set, it will publish the same port that the broker binds to.

    Type: int
    Default: 5500
    Valid Values:
    Importance: high
    Update Mode: read-only

auto.create.topics.enable: Enable auto creation of topic on the server

    Type: boolean
    Default: true
    Valid Values:
    Importance: high
    Update Mode: read-only

.
.
.

Wir möchten die obige Datei in eine INI-Datei wie folgt konvertieren:

advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true
.
.
.

Hinweis - jeder Parameter in der Textdatei steht am Anfang der Datei ohne Leerzeichen, während der Wert durch dasStandard,

irgendwelche Vorschläge, wie man die textDatei inimit Bash oder Awk oder Perl/Python usw. in eine andere Datei konvertiert

Antwort1

Mit awk:

$ awk -F': ' '/^[^\t ]+:/{key=$1; next}; $1 ~ /^[\t ]+Default/{print key "=" $2}' file
advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true

Antwort2

Habe es mit der untenstehenden Methode versucht und es hat gut funktioniert

awk -F ":"  '/advertised|auto.create/{f=$1;print f}/Default/{print $2}' filename| sed "N;s/\n/=/g"

Ausgabe

advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true

Python

#!/usr/bin/python
import re
import itertools
from itertools import islice
final=[]
k=open('filename','r')
for i in k:
    if i.startswith('advertised' or 'auto') or i.startswith('auto'):
        final.append(i.split(":")[0].strip())
        p=list(islice(k,3))
        for z in p:
            if re.search('Default',z):
                final.append(z.split(":")[-1].strip())


for g in range(0, len(final),2):
    print  "=".join(final[g:g+2])

Ausgabe

advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true

verwandte Informationen