如何在awk中使用多个定界符?

ham*_*nxc 6 linux bash awk

我想用冒号用awk拆分一个变量,但只能拆分最后一个变量。

从此输入:

 ACCEPT     tcp  --  0.0.0.0/0     0.0.0.0/0     tcp dpt:22
Run Code Online (Sandbox Code Playgroud)

我想要以下输出:

 protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=22
Run Code Online (Sandbox Code Playgroud)

现在这是我的awk命令:

 awk '/^ACCEPT/ {print "protocol=",$2, "source=",$4,"destination=",$5,"port=",$7}"
Run Code Online (Sandbox Code Playgroud)

产生:

protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=dpt:22
Run Code Online (Sandbox Code Playgroud)

但我想22离开$7而不是dpt:22

我已经尝试过使用awk的字段分隔符,但是我可以弄清楚如何使其仅适用于单个变量

Wil*_*ell 5

只需调整FS即可包括:

$ echo 'ACCEPT     tcp  --  0.0.0.0/0     0.0.0.0/0     tcp dpt:22' |
     awk '/^ACCEPT/{printf("protocol=%s source=%s destination=%s port=%s\n", $2,$4,$5,$8)}
     ' FS='[ :]*'
protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=22
Run Code Online (Sandbox Code Playgroud)

您可能需要包括标签,然后执行 FS='[ :\t]*'