提问人:sameucho 提问时间:11/17/2023 最后编辑:sameucho 更新时间:11/17/2023 访问量:69
在动态线条范围内重复替换图案 [关闭]
repeated replace of pattern in dynamic range of lines [closed]
问:
我有非常大的文件,其中包含许多行上的模式“AAAx”,我需要用数字替换。将用作替换字符串的编号取决于文件中出现 AAAx 模式的行号。不同的线范围使用不同的数字。
我使用以下 awk 命令修改一定范围内的行中的模式,效果正常。替换的行范围由给定的“n”计算得出:
awk '{C=123;n=1;Z=4633+n*12616;K=4632+(n+1)*12616}; NR>=Z && NR<=K{for(x=1;x<=NF;x++)if($x~/AAAx/){sub(/AAAx/,C)}}1' file1.cfg > file2.cfg
或者,清晰地:
awk -o- '{C=123;n=1;Z=4633+n*12616;K=4632+(n+1)*12616}; NR>=Z && NR<=K{for(x=1;x<=NF;x++)if($x~/AAAx/){sub(/AAAx/,C)}}1'
{
C = 123
n = 1
Z = 4633 + n * 12616
K = 4632 + (n + 1) * 12616
}
NR >= Z && NR <= K {
for (x = 1; x <= NF; x++) {
if ($x ~ /AAAx/) {
sub(/AAAx/, C, $0)
}
}
}
1 {
print
}
但我需要对“C”和“n”的不同值重复它,因此我将其修改如下:
awk 'C=123; {
for(n=2;n<300;n++){
{C+=2; Z=4633+n*12616;K=4632+(n+1)*12616};NR>=Z && NR<=K{for(x=1;x<=NF;x++)if($x~/AAAx/){sub(/AAAx/,C)}}1 |
}
}' file1.cfg > file2.cfg
或者,清晰地:
C = 123 {
print
}
{
for (n = 2; n < 300; n++) {
C += 2
Z = 4633 + n * 12616
K = 4632 + (n + 1) * 12616
NR >= Z && NR <= K {
for (x = 1; x <= NF; x++) {
if ($x ~ /AAAx/) {
sub(/AAAx/, C, $0)
}
}
}
1
}
}
但是由于语法错误,这段代码不起作用:
for(n=2;n<300;n++){
{Z=4633+n*12616;K=4632+(n+1)*12616};NR>=Z && NR<=K{for(x=1;x<=NF;x++)if($x~/AAAx/){sub(/AAAx/,n)}}1
}
}' file1.cfg > file2.cfg
awk: cmd. line:3: {Z=4633+n*12616;K=4632+(n+1)*12616};NR>=Z && NR<=K{for(x=1;x<=NF;x++)if($x~/AAAx/){sub(/AAAx/,n)}}1
awk: cmd. line:3: ^ syntax error
或者,清晰地:
awk '
C = 123 {
print
}
{
for (n = 2; n < 300; n++) {
C += 2
Z = 4633 + n * 12616
K = 4632 + (n + 1) * 12616
NR >= Z && NR <= K {
for (x = 1; x <= NF; x++) {
if ($x ~ /AAAx/) {
sub(/AAAx/, C, $0)
}
}
}
1
}
}
' file1.cfg > file2.cfg
awk: cmd. line:11: NR >= Z && NR <= K {
awk: cmd. line:11: ^ syntax error
...我不明白为什么。甚至可以在 awk 中使用这种嵌套循环吗?
感谢您的帮助
答: 暂无答案
评论
|
-o-
C / n / Z / K
BEGIN { ... }
BEGIN
C / n / Z / K
awk
NR >= Z && NR <= K
Z / K
Z / K
BEGIN { ... }
NR