有人可以帮我解释以下awk命令吗?我对这里的多个gsub函数做什么感到困惑。
cat vslist.txt | awk '\''/:/{gsub(/ /, \"\", $0);gsub(/{/, \",\", $0);printf $s,$1}'\''");printf "\n"}'
vslist.txt
ltm pool PL_Axxxxx_POOL {
members {
ND_APIxxxxxx:7807 {
address 12.7.21.6
app-service none
connection-limit 0
description none
dynamic-ratio 1
ND_APIxxxxxx:7809 {
address 12.7.21.5
app-service none
connection-limit 0
description none
dynamic-ratio 1
ND_APIxxxxxx:7808 {
address 12.7.21.9
app-service none
connection-limit 0
description none
dynamic-ratio 1
输出
ND_APIxxxxxx:7807
ND_APIxxxxxx:7809
ND_APIxxxxxx:7808
答案 0 :(得分:1)
gsub()
调用修改它们正在操作的变量(在本例中为$0
)就地。因此,第二个一个接一个地更改了第一个的输出。
考虑以下脚本的简化和注释版本:
#!/bin/bash
awk '
/:/ { # run the below code only for lines that contain :
gsub(/ /, "", $0); # remove all spaces
gsub(/{/, "", $0); # remove opening curly braces
print $1 # print the first column in what's next
}
' <vslist.awk # with stdin from vslist.awk
顺便说一句,您可以自己了解gsub()
的交互方式是添加额外的打印语句:
#!/bin/bash
awk '
/:/ {
print "Input: " $0;
gsub(/ /, "", $0);
print "After first gsub: " $0;
gsub(/{/, "", $0);
print "After second gsub, the whole line is: " $0;
print $1;
}
' <vslist.awk # with stdin from vslist.awk
使用该仪器,示例输入的输出为:
Input: ND_APIxxxxxx:7807 {
After first gsub: ND_APIxxxxxx:7807{
After second gsub, the whole line is: ND_APIxxxxxx:7807
ND_APIxxxxxx:7807
Input: ND_APIxxxxxx:7809 {
After first gsub: ND_APIxxxxxx:7809{
After second gsub, the whole line is: ND_APIxxxxxx:7809
ND_APIxxxxxx:7809
Input: ND_APIxxxxxx:7808 {
After first gsub: ND_APIxxxxxx:7808{
After second gsub, the whole line is: ND_APIxxxxxx:7808
ND_APIxxxxxx:7808
...因此您可以清楚地看到每个操作都已发生(第一个操作删除了空格,第二个操作删除了{
)。