bash shell: echo 3 输出 netstat 列表到 3 列
bash shell: echo 3 list of output netstat to 3 column
大家好,我有一个这样的脚本shell:
#!/bin/bash
netstatport80=`netstat -an|grep :80 |awk '!/:8080/'|awk '!/:8081/' |awk '{print }'|cut -d":" -f1|sort|uniq -c|sort -rn| grep -v "0.0.0.0"`
netstatport443=`netstat -an|grep :443 |awk '!/:8080/'|awk '{print }'|cut -d":" -f1|sort|uniq -c|sort -rn| grep -v "0.0.0.0"`
netstatESTA=`netstat -an|grep ESTA |awk '!/:8080/'|awk '{print }'|cut -d":" -f1|sort|uniq -c|sort -rn| grep -v "0.0.0.0"`
echo '
List IP request port 80: List IP request port 443: List IP request ESTA:
'$netstatport80' '$netstatport443' '$netstatESTA'
'
我怎么能有这样的输出:
List IP request port 80: List IP request port 443: List IP request ESTA:
123.x.x.x 183.x.x.x 153.x.x.x
193.x.x.x 123.x.x.x 164.x.x.x
130.x.x.x 103.x.x.x 101.x.x.x
187.x.x.x 173.x.x.x 185.x.x.x
感谢大家的帮助!
paste
是满足您需要的标准工具,它将多个文件连接成列:
$ echo """A
> a
> a
> a""" > A.txt
$ echo """B
> b
> b""" > B.txt
$ echo """C
> c
> c
> c
> c
> c""" > C.txt
$ paste A.txt B.txt C.txt
AAAA BB C
a b c
a b c
a c
a c
a c
c
c
它适用于文件,因此您应该将过滤后的 netstat
命令的输出写入文件,或者您可以使用匿名管道:
paste <(echo "List IP request port 80:"; echo "$netstatport80") <(echo "List IP request port 443:"; echo "$netstatport443") <(echo "List IP request ESTA:"; echo "$netstatESTA")
如果不同列的大小破坏了格式,您可以使用 paste
的 -d
选项指定列之间的分隔符,然后使用 column
工具重新格式化它们,或尝试使用 pr
将截断特定大小的列(请参阅下面我的回答的先前版本)。
编辑:使用 pr
的旧答案,这是过分的且鲜为人知。
看起来你可以使用 pr
'merge' -m
选项:
$ echo """A
> a
> a
> a""" > A.txt
$ echo """B
> b
> b""" > B.txt
$ echo """C
> c
> c
> c
> c
> c""" > C.txt
$ pr -mT A.txt B.txt C.txt
A B C
a b c
a b c
a c
c
c
pr
是我在研究您的问题时在 this SO answer 中发现的寻呼机,它的 -m
标志满足您的需要,它的 -T
选项禁用页面格式(页眉、页脚,也许还有更多?)。
它从文件中获取输入,所以你必须将过滤后的 netstat
命令的输出重定向到文件而不是使用变量,除非你想打扰匿名管道:
pr -mT <(echo "List IP request port 80:"; echo "$netstatport80") <(echo "List IP request port 443:"; echo "$netstatport443") <(echo "List IP request ESTA:"; echo "$netstatESTA")
大家好,我有一个这样的脚本shell:
#!/bin/bash
netstatport80=`netstat -an|grep :80 |awk '!/:8080/'|awk '!/:8081/' |awk '{print }'|cut -d":" -f1|sort|uniq -c|sort -rn| grep -v "0.0.0.0"`
netstatport443=`netstat -an|grep :443 |awk '!/:8080/'|awk '{print }'|cut -d":" -f1|sort|uniq -c|sort -rn| grep -v "0.0.0.0"`
netstatESTA=`netstat -an|grep ESTA |awk '!/:8080/'|awk '{print }'|cut -d":" -f1|sort|uniq -c|sort -rn| grep -v "0.0.0.0"`
echo '
List IP request port 80: List IP request port 443: List IP request ESTA:
'$netstatport80' '$netstatport443' '$netstatESTA'
'
我怎么能有这样的输出:
List IP request port 80: List IP request port 443: List IP request ESTA:
123.x.x.x 183.x.x.x 153.x.x.x
193.x.x.x 123.x.x.x 164.x.x.x
130.x.x.x 103.x.x.x 101.x.x.x
187.x.x.x 173.x.x.x 185.x.x.x
感谢大家的帮助!
paste
是满足您需要的标准工具,它将多个文件连接成列:
$ echo """A
> a
> a
> a""" > A.txt
$ echo """B
> b
> b""" > B.txt
$ echo """C
> c
> c
> c
> c
> c""" > C.txt
$ paste A.txt B.txt C.txt
AAAA BB C
a b c
a b c
a c
a c
a c
c
c
它适用于文件,因此您应该将过滤后的 netstat
命令的输出写入文件,或者您可以使用匿名管道:
paste <(echo "List IP request port 80:"; echo "$netstatport80") <(echo "List IP request port 443:"; echo "$netstatport443") <(echo "List IP request ESTA:"; echo "$netstatESTA")
如果不同列的大小破坏了格式,您可以使用 paste
的 -d
选项指定列之间的分隔符,然后使用 column
工具重新格式化它们,或尝试使用 pr
将截断特定大小的列(请参阅下面我的回答的先前版本)。
编辑:使用 pr
的旧答案,这是过分的且鲜为人知。
看起来你可以使用 pr
'merge' -m
选项:
$ echo """A
> a
> a
> a""" > A.txt
$ echo """B
> b
> b""" > B.txt
$ echo """C
> c
> c
> c
> c
> c""" > C.txt
$ pr -mT A.txt B.txt C.txt
A B C
a b c
a b c
a c
c
c
pr
是我在研究您的问题时在 this SO answer 中发现的寻呼机,它的 -m
标志满足您的需要,它的 -T
选项禁用页面格式(页眉、页脚,也许还有更多?)。
它从文件中获取输入,所以你必须将过滤后的 netstat
命令的输出重定向到文件而不是使用变量,除非你想打扰匿名管道:
pr -mT <(echo "List IP request port 80:"; echo "$netstatport80") <(echo "List IP request port 443:"; echo "$netstatport443") <(echo "List IP request ESTA:"; echo "$netstatESTA")