Bash 使用awk和cut的Unix
我试图让netstat、awk和cut一起解析netstat输出的两部分 我只想提取第一列的最后4个数字:Bash 使用awk和cut的Unix,bash,unix,awk,cut,Bash,Unix,Awk,Cut,我试图让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.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
我试图合并两个AWK,但出现了一个错误
这可能吗
谢谢大家! 对于我的系统来说,它是第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
您可以使用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}'
在
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$/
。您也可以使用sed
:
echo " 33.44.444.43.5555
24.204.101.85.3434
11.204.101.85.6533" | sed 's/\(.*\)\.\([^.]*\)$/\2 | \1/'
您的预期输出与您的需求不符!你能再检查一下吗?谢谢!这正是我想要的,当你使用awk时,你永远不需要grep、sed或cut,所以虽然这可能会产生你期望的输出,但这不是一个好的解决方案。