我想让netstat,awk和cut一起工作来解析netstat输出的两个部分
我想只提取第一列的最后4个数字:
11.111.222.32.3433
10.204.101.85.3433
10.204.101.85.3433
我能够做到:
netstat -an |grep 3433 |awk '{print $1}' | cut -d "." -f5
但我也想要打印第二列,但不记下最后4个数字
示例:
33.44.444.43.5555
24.204.101.85.3434
11.204.101.85.6533
所以我希望最终输出看起来像
3433 | 33.44.444.43
3433 | 24.204.101.85
3433 | 11.204.101.85
我试图合并两个awks,但是我收到错误
这可能吗?
谢谢!
答案 0 :(得分:1)
对于我的系统来说,它是第4栏,第5段,所以以下为我工作:
$ netstat -an|grep 3433|awk '{print $4,"|",$5}'|sed s/:/./g|cut -d '.' -f5-8
正如您描述的数据一样,这应该适合您
$ netstat -an|grep 3433|awk '{print $1,"|",$2}'|cut -d '.' -f5-8
答案 1 :(得分:0)
你可以使用awk的函数split
切入awk。您还可以使用awk中的正则表达式条件过滤记录,从而使grep
和cut
变得多余。
以下内容应该让您接近:
netstat -an | awk 'BEGIN{OFS=" | "} $1~/3433$/{split($1,a,"."); split($2,b,"."); print a[5], b[1]"."b[2]"."b[3]"."b[4] }'
这就像:
3433
a
b
a
的第5个元素,然后是OFS,然后是数组b
的第1,第2,第3和第4个元素,它们之间有句点。您也可以通过使用多个分隔符来确定一个不同的字段,这可能也适合这里,具体取决于您的需要。
这看起来像是:
netstat -an | awk -F"[ .]" 'BEGIN{OFS="."} $5=="3433" { print $5" | " $6,$7,$8,$9}'
答案 2 :(得分:0)
在awk
$ ... | awk -v OFS=' | ' '/3433/{sub(/.*\./,"",$1); sub(/\.[^.]+$/,"",$2)}1'
3433 | 33.44.444.43
3433 | 24.204.101.85
3433 | 11.204.101.85
但是,您应该检查$1~/3433$/
。
答案 3 :(得分:0)
您还可以使用sed
:
echo " 33.44.444.43.5555
24.204.101.85.3434
11.204.101.85.6533" | sed 's/\(.*\)\.\([^.]*\)$/\2 | \1/'