Loops 阵列循环转换
在执行HP UX存储迁移项目时, 我发现一个Loops 阵列循环转换,loops,awk,hp-ux,Loops,Awk,Hp Ux,在执行HP UX存储迁移项目时, 我发现一个awk语句如下 ioscan -funNCdisk | \ awk '{a[NR]=$0} $0~s {f[NR]++} END {for (j=1;j<=NR;j++) if (f[j]) for (i=j+C;i<=j+C;i++) \ print a[i]}' C=1 s="NetApp" ioscan-funNCdisk |\ awk'{a[NR]=$0}$0~s{f[NR]+}END{for(j=1;j让我们将awk脚本本身分解
awk
语句如下
ioscan -funNCdisk | \
awk '{a[NR]=$0} $0~s {f[NR]++} END {for (j=1;j<=NR;j++) if (f[j]) for (i=j+C;i<=j+C;i++) \
print a[i]}' C=1 s="NetApp"
ioscan-funNCdisk |\
awk'{a[NR]=$0}$0~s{f[NR]+}END{for(j=1;j让我们将awk
脚本本身分解成一个文件,并调用该文件script.awk
:
#!/usr/bin/awk -f
BEGIN { C = 1; s = "pants" }
{ a[NR] = $0 }
$0 ~ s { f[NR]++ }
END {
for (j = 1; j <= NR; j++)
if (f[j])
for (i = j + C; i <= j + C; i++)
print a[i]
}
因此,在您的情况下(这里用“NetApp”替换“裤子”),它实际上与(使用GNUsed
)
或
个人提示:这就是我讨厌所谓的“一句话”的原因。它们很难看,没有人理解,而且完全无法维护。请,请,请,把复杂的任务放在脚本中,写得干净利落,加上注释,并将其用作你的“一句话”
EDIT:经过一番思考,我意识到这个脚本可能试图为num=C
和re=s
实现grep-Cnum re
(获取C
上下文行),但它在内部循环中得到了错误的循环索引(应该是i=j-C;i让我们将awk
脚本本身分解成一个文件,并将该文件称为script.awk
:
#!/usr/bin/awk -f
BEGIN { C = 1; s = "pants" }
{ a[NR] = $0 }
$0 ~ s { f[NR]++ }
END {
for (j = 1; j <= NR; j++)
if (f[j])
for (i = j + C; i <= j + C; i++)
print a[i]
}
因此,在您的情况下(这里用“NetApp”替换“裤子”),它实际上与(使用GNUsed
)
或
个人提示:这就是我讨厌所谓的“一句话”的原因。它们很难看,没有人理解,而且完全无法维护。请,请,请,把复杂的任务放在脚本中,写得干净利落,加上注释,并将其用作你的“一句话”
EDIT:经过一些思考,我意识到这个脚本可能试图为num=C
和re=s
实现grep-Cnum re
(获得C
上下文行),但它在内部循环中得到了错误的循环索引(应该是I=j-C;I谢谢Kusalanda:)现在我的好奇心被释放了!
你说得对,这个循环的范围最初设计为从j-c到j+c,但经过某种修改,可能有人打算只找到一行,而不是几行。谢谢你,库萨兰达:)现在我的好奇心被释放了!
你说得对,这个循环的范围最初设计为从j-c到j+c,但经过某种修改,可能有人打算只查找一行,而不是几行。如果你想学习awk
,这里有一些有用的链接:如果你想学习awk
,这里有一些有用的链接:
sed -n '/pants/,+1p' data.in | grep -v 'pants'
grep -A1 'pants' data.in | grep -E -v 'pants|-'