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