特定の情報を解析

特定の情報を解析

Linuxシステムでコマンドを実行し、出力をファイルにリダイレクトしています。私のファイルは次のとおりです。

client: tc-abcdefgh-igjk-lmno-pqrs-tuvwxyza
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-tuvwxyza
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-tuvwxyza
        connection-1: frdp::Green::Test
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-abcdefgh
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-abcedfgh
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-abcdefgh
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-ijklmnop
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-ijklmnop
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-ijklmnop
client: tc-abcdefg-higj-klmn-opqr-qrstuvwx
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-qrstuvwx
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-qrstuvwx
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-12345678
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-12345678
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-12345678
        connection-0: frdp::Green::Test
client: tc-abcdefg-higj-klmn-opqr-09876543
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-09876543
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-09876543
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-135792468
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-135792468
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-135792468
        connection-0: frdp::Green::Test
client: tc-abcdefgh-igjk-lmno-pqrs-08649753
        version: xxxx
        uuid: abcdefgh-igjk-lmno-pqrs-08649753
        user-uid: 10000
        user: someuser
        primary-server: xxx.xxx.xxx.xxx
        operational-mode: normal
        mac: XX:XX:XX:XX:XX:XX
        locked-time: xx:xx:xx
        ipaddr: xxx.xxx.xxx.xxx
        hostname: tc-abcdefgh-igjk-lmno-pqrs-08649753
        connection-0: frdp::Purple::Test

Purpleへの接続のみを表示するクライアントのホスト名と、接続がないクライアントを新しいファイルに抽出したいと思います。以下を使用して、関係のない情報をすべて正常に取得しました。

awk -F '\t' '/^client: / || /connection/' myfile1 >> myfile2

紫色で接続されているクライアントまたは接続されていないクライアントのみを抽出することはできません。クライアントが紫に接続されていても、緑に接続されているすべてを無視したいと思います。

編集:これはawkを使用したときに得られる結果です。

client: tc-abcdefgh-igjk-lmno-pqrs-tuvwxyza
        connection-1: frdp::Green::Test
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-abcdefgh
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-ijklmnop
client: tc-abcdefg-higj-klmn-opqr-qrstuvwx
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-12345678
        connection-0: frdp::Green::Test
client: tc-abcdefg-higj-klmn-opqr-09876543
        connection-0: frdp::Purple::Test
client: tc-abcdefgh-igjk-lmno-pqrs-135792468
        connection-0: frdp::Green::Test
client: tc-abcdefgh-igjk-lmno-pqrs-08649753
        connection-0: frdp::Purple::Test

編集:私は私のあいまいさを考慮していません。私が探している出力は次のようになります。

tc-abcdefgh-igjk-lmno-pqrs-abcdefgh
tc-abcdefgh-igjk-lmno-pqrs-ijklmnop
tc-abcdefg-higj-klmn-opqr-qrstuvwx
tc-abcdefg-higj-klmn-opqr-09876543
tc-abcdefgh-igjk-lmno-pqrs-08649753

私はPurpleにしか接続されていませんが、接続されていない5つのクライアントが必要です。

ベストアンサー1

すべてのUnixシステムのすべてのシェルでawkを使用してください。

$ cat tst.awk
$1 == "client:" {
    prt()
}
/connection/ {
    gotConns = 1
    if ( /Purple/ ) {
        gotTarget = 1
    }
    else {
        gotOther = 1
    }
}
$1 == "hostname:" {
    host = $2 ORS
}
END {
    prt()
}

function prt(   found) {
    if ( (gotTarget && !gotOther) || !gotConns ) {
        printf "%s", host
    }
    host = gotConns = gotTarget = gotOther = ""
}

$ awk -f tst.awk file
tc-abcdefgh-igjk-lmno-pqrs-abcdefgh
tc-abcdefgh-igjk-lmno-pqrs-ijklmnop
tc-abcdefgh-igjk-lmno-pqrs-qrstuvwx
tc-abcdefgh-igjk-lmno-pqrs-09876543
tc-abcdefgh-igjk-lmno-pqrs-08649753

おすすめ記事