首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换特定元素

替换特定元素
EN

Stack Overflow用户
提问于 2016-06-07 03:42:52
回答 1查看 39关注 0票数 0

我对编码非常陌生,几天来我一直在尝试替换特定的元素。

代码语言:javascript
复制
 1 2 3 4 5

 1 2 3 4 5

 1 2 3 4 5

 1 2 7 4 5

 1 2 7 4 5

首先要查找在第三列中有7的行。然后如果行中有7行,则要将行上两行中的第三列替换为0。

代码语言:javascript
复制
 for ((i=n1;i<n1+5;i++))
 do
 n2=`grep -n "$i" test.txt | cut -d ':' -f1`
 let n3=$n2{print $3}
 awk 'n3==7 (n2-2){print $3=0}' 
 done test < test1

我完全不知道,需要你的帮助。谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-06-07 04:15:00

我假设字段的数量始终为5,否则调整脚本。

试一下这个:

代码语言:javascript
复制
awk '$3=="7" && NR>2{b[3,1+NR%2]="0"}
NR>2{i=1+NR%2;print b[1,i],b[2,i],b[3,i],b[4,i],b[5,i]}
{i=1+NR%2;for(j=1;j<=NF;j++) b[j,i]=$j}
END {for (i=1;i<=2;i++) print b[1,i],b[2,i],b[3,i],b[4,i],b[5,i]}' text.txt

Awk - A Tutorial and Introduction - by Bruce Barnett开始,有一个很棒的教程

上面的awk脚本使用一个二维数组(b[f,l]缓冲区)来存储前两行的字段。

脚本的每一行都跟在pattern {commands}后面。

NR是记录(行)号。或者,1+NR%2等于12

$3=="7" && NR>2{b[3,1+NR%2]="0"}:当当前第三个字段等于7时,记录(行) NR-2的第三个字段被重置为零。

NR>2{i=1+NR%2;print b[1,i],b[2,i],b[3,i],b[4,i],b[5,i]}:从记录号3开始打印存储在缓冲器中的记录(行) NR-2的字段。

{i=1+NR%2;for(j=1;j<=NF;j++) b[j,i]=$j}:将当前记录(行)的字段保存到缓冲区中。

END {for (i=1;i<=2;i++) print b[1,i],b[2,i],b[3,i],b[4,i],b[5,i]}:当awk到达文件末尾时,缓冲区中仍有2行;它们被打印出来。

测试:

代码语言:javascript
复制
$ cat text.txt
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 7 4 5
1 2 7 4 5
$ awk '$3=="7" && NR>2{b[3,1+NR%2]="0"}
NR>2{i=1+NR%2;print b[1,i],b[2,i],b[3,i],b[4,i],b[5,i]}
{i=1+NR%2;for(j=1;j<=NF;j++) b[j,i]=$j}
END {for (i=1;i<=2;i++) print b[1,i],b[2,i],b[3,i],b[4,i],b[5,i]}' text.txt
1 2 3 4 5
1 2 0 4 5
1 2 0 4 5
1 2 7 4 5
1 2 7 4 5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37665615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档