Shell 在awk中,多个gsub()调用如何一个接一个地协同工作?
有人能帮我解释下面的awk命令吗?我不明白多个gsub函数在这里做什么Shell 在awk中,多个gsub()调用如何一个接一个地协同工作?,shell,awk,gsub,Shell,Awk,Gsub,有人能帮我解释下面的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
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
输出
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
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
使用该工具,示例输入的输出为:
输入:ND\u APIxxxxxx:7807{
在第一个gsub:ND_APIxxxxxx:7807之后{
第二次gsub后,全线为:ND_APIxxxxxx:7807
ND_APIxxxxxx:7807
输入:ND_APIxxxxxx:7809{
在第一个gsub:ND_APIxxxxxx:7809之后{
第二次gsub后,全线为:ND_APIxxxxxx:7809
ND_APIxxxxxx:7809
输入:ND_APIxxxxxx:7808{
在第一个gsub:ND_APIxxxxxx:7808之后{
第二次gsub后,全线为:ND_APIxxxxxx:7808
ND_APIxxxxxx:7808
…因此,您可以清楚地看到每个操作的发生(第一个操作剥离空格,第二个操作删除
{
)。“请解释此代码”问题通常超出了我们的范围;请参见。也就是说,缩小问题的范围可能会改善它:您是否了解单个gsub
调用的功能?您是否了解其中一个gsub
调用,但不了解另一个?或者是对它们如何组合的真正误解?顺便问一句,奇怪的引用是什么?有相当多的误解在这里重新反斜杠,而不是在常规shell上下文中运行它。这是从其他引用上下文中的代码中获取的吗?…哦,等等,$s
是外部变量吗?好的,以正确的方式传递该变量(使用awk-v
)会使代码的其余部分更易于阅读。(此外,我们需要知道它包含什么才能正确理解此脚本;应测试代码段是否足够完整,以便有人重现问题中的行为,如帮助中心页面上的id所述)。