由于一个单词之间有空格 awk 改变了输出
例如:“本地地址”awk
分别考虑本地和地址
# netstat -antulp | awk 'NR>1'
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1115/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1397/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1271/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1473/master
tcp 0 0 0.0.0.0:55547 0.0.0.0:* LISTEN 1133/rpc.statd
输出应该是:$4 $5 $6
Local Address Foreign Address PID/Program name
0.0.0.0:111 0.0.0.0:* 1115/rpcbind
0.0.0.0:22 0.0.0.0:* 1397/sshd
127.0.0.1:631 0.0.0.0:* 1271/cupsd
127.0.0.1:25 0.0.0.0:* 1473/master
0.0.0.0:55547 0.0.0.0:* 1133/rpc.statd
答案1
来自 awk 手册:
awk 实用程序应将每个输入记录解释为字段序列,其中默认情况下,字段是非字符串空白的非新队人物。这个默认的空白的和新队可以使用 FS 内置变量或 -F sepstring 选项更改字段分隔符。
您可以使用“-F”选项或通过在 awk 代码中设置 FS 选项来更改行为:
awk 'BEGIN{FS="\t"} {print $1 $2 $3}'
至于 netstat 如何输出我无法回答。 :)
答案2
尝试
netstat -antulp |\
awk 'NR == 1 { skip }
NR == 2 { printf "%s %-19s\t%s %-18s\t%s %s\n",$4,$5,$6,$7,$9,$10}
NR > 2 { printf "%-24ss\t%-24ss\t%s\n",$4,$5,$6 ;}'
在哪里
- 第一行被跳过
- 第二行,我选择您需要的字段(并调整列大小)
- 所有其他行,打印字段进行调整
- 为了看得更清楚,我把线折叠起来,当然这可能是一条线。