有没有一种方法可以根据公共键列(IP 地址)对来自 2 个不同命令的 bash 输出进行“左外连接”?由于各种原因,我想避免将任一命令的输出保存到文件中,并将文件名用作 awk/join 的输入。
这些是我想合并在一起的 2 个输出:
output1=$(oc get pod -lname=elasticsearch -o wide)
output2=$(curl -ks https://elasticsearch.apps.ocp.domain.com/_cat/allocation?v)
这是我的 elasticsearch pod 的磁盘利用率
$ echo "$output1"
shards disk.indices disk.used disk.avail disk.total disk.percent host ip node
347 1.5tb 1.5tb 4.2tb 5.8tb 27 10.1.1.1 10.1.1.1 jxAuPMt
335 1.7tb 1.7tb 4tb 5.8tb 30 10.2.2.2 10.2.2.2 bwYW1cg
341 1.3tb 1.9tb 959.7gb 2.9tb 67 10.3.3.3 10.3.3.3 69O4sR-
343 1.6tb 1.7tb 1.1tb 2.9tb 59 10.4.4.4 10.4.4.4 zCVUS05
346 1.4tb 1.9tb 1000.6gb 2.9tb 66 10.5.5.5 10.5.5.5 AlvtEtf
345 1.6tb 1.6tb 1.2tb 2.9tb 57 10.6.6.6 10.6.6.6 pmObkSm
248 1tb 1tb 374.9gb 1.4tb 74 10.7.7.7 10.7.7.7 OSzB5J1
332 1.4tb 1.9tb 952.1gb 2.9tb 68 10.8.8.8 10.8.8.8 EShhlrb
218 1011.8gb 1tb 418.2gb 1.4tb 71 10.9.9.9 10.9.9.9 1rQ7PXD
329 1.7tb 1.8tb 1tb 2.9tb 63 10.10.10.10 10.10.10.10 73TfUnn
15 UNASSIGNED
这是我的环境中正在运行的 elasticsearch pod
$ echo "$output2"
NAME READY STATUS RESTARTS AGE IP NODE
elasticsearch-4-40700 1/1 Running 0 4d 10.1.1.1 server1b.ocp.domain.com
elasticsearch-4-6m2p1 1/1 Running 0 4d 10.2.2.2 server2b.ocp.domain.com
elasticsearch-4-8n8v5 1/1 Running 0 7d 10.3.3.3 server3b.ocp.domain.com
elasticsearch-4-ffnk0 1/1 Running 0 4d 10.4.4.4 server4b.ocp.domain.com
elasticsearch-4-h5xr6 1/1 Running 0 7d 10.5.5.5 server5b.ocp.domain.com
elasticsearch-4-h6c15 1/1 Running 0 7d 10.6.6.6 server6b.ocp.domain.com
elasticsearch-4-j7cv5 1/1 Running 0 7d 10.7.7.7 server7b.ocp.domain.com
elasticsearch-4-nn3pc 1/1 Running 0 5d 10.8.8.8 server8b.ocp.domain.com
elasticsearch-4-sq5hr 1/1 Running 0 7d 10.9.9.9 server9b.ocp.domain.com
elasticsearch-4-zj7tq 1/1 Running 0 7d 10.10.10.10 server10b.ocp.domain.com
elasticsearch-4-az9sp 1/1 Running 0 7d 10.10.10.11 server11b.ocp.domain.com
elasticsearch-4-bi2c7 1/1 Running 0 7d 10.10.10.12 server12b.ocp.domain.com
根据 IP 地址从 output1 和 output2 执行“左外连接”后的预期结果
NAME READY STATUS RESTARTS AGE IP NODE shards disk.indices disk.used disk.avail disk.total disk.percent node
elasticsearch-4-40700 1/1 Running 0 4d 10.1.1.1 server1b.ocp.domain.com 347 1.5tb 1.5tb 4.2tb 5.8tb 27 jxAuPMt
elasticsearch-4-6m2p1 1/1 Running 0 4d 10.2.2.2 server2b.ocp.domain.com 335 1.7tb 1.7tb 4tb 5.8tb 30 bwYW1cg
elasticsearch-4-8n8v5 1/1 Running 0 7d 10.3.3.3 server3b.ocp.domain.com 341 1.3tb 1.9tb 959.7gb 2.9tb 67 69O4sR-
elasticsearch-4-ffnk0 1/1 Running 0 4d 10.4.4.4 server4b.ocp.domain.com 343 1.6tb 1.7tb 1.1tb 2.9tb 59 zCVUS05
elasticsearch-4-h5xr6 1/1 Running 0 7d 10.5.5.5 server5b.ocp.domain.com 346 1.4tb 1.9tb 1000.6gb 2.9tb 66 AlvtEtf
elasticsearch-4-h6c15 1/1 Running 0 7d 10.6.6.6 server6b.ocp.domain.com 345 1.6tb 1.6tb 1.2tb 2.9tb 57 pmObkSm
elasticsearch-4-j7cv5 1/1 Running 0 7d 10.7.7.7 server7b.ocp.domain.com 248 1tb 1tb 374.9gb 1.4tb 74 OSzB5J1
elasticsearch-4-nn3pc 1/1 Running 0 5d 10.8.8.8 server8b.ocp.domain.com 332 1.4tb 1.9tb 952.1gb 2.9tb 68 EShhlrb
elasticsearch-4-sq5hr 1/1 Running 0 7d 10.9.9.9 server9b.ocp.domain.com 218 1011.8gb 1tb 418.2gb 1.4tb 71 1rQ7PXD
elasticsearch-4-zj7tq 1/1 Running 0 7d 10.10.10.10 server10b.ocp.domain.com 329 1.7tb 1.8tb 1tb 2.9tb 63 73TfUnn
elasticsearch-4-az9sp 1/1 Running 0 7d 10.10.10.11 server11b.ocp.domain.com
elasticsearch-4-bi2c7 1/1 Running 0 7d 10.10.10.12 server12b.ocp.domain.com
下面产生您想要的输出,但没有标题:
有点不干净的部分是如何删除重复的 ip 地址列
'awk '!($14=$15="")''
您可能最好使用一点多行脚本而不是单行来使此过程更清晰。