由于一个单词之间有空格 awk 改变了输出

由于一个单词之间有空格 awk 改变了输出

由于一个单词之间有空格 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 ;}'

在哪里

  • 第一行被跳过
  • 第二行,我选择您需要的字段(并调整列大小)
  • 所有其他行,打印字段进行调整
  • 为了看得更清楚,我把线折叠起来,当然这可能是一条线。

相关内容