首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Awk中操作数据

在Awk中操作数据
EN

Stack Overflow用户
提问于 2014-04-29 09:17:33
回答 1查看 152关注 0票数 0

我是Awk编程的新手。我有一个关于操作文本文件的问题,这是在可视化软件(Circos http://circos.ca)中绘制某些基于网络的图像所必需的。

我有一些输入数据,我希望使用awk/grep/sed来操作这些数据的值。有9对(18行).5对(前10行)用于"from=ABCB11",4对(接下来的8行)用于"from =ABCC8“。我想要的是从第一对的第一行提取值,并将其替换到其他对的每一行中。因此,第二组的值是9 10,这应该会替换group2中所有出现的值。group-2的下一个值为28 29,应替换为9 10。

停止应该由"from=name“确定,”from=ABCB11“是”.Its“,而不是必须捕获表达式并在下一次出现时替换的行将属于group-2,因为在此instance.It中可能是group-3或group-4,直到group-10。因此,第二个集合("from =ABCC8”)可能属于group-4/5/6而不是group-2。这只是一个巧合。

代码语言:javascript
复制
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-3 0 1 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-2 28 29 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM1,toid=114,use=1,z=1
group-5 0 1 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM1,toid=114,use=1,z=1
group-2 29 30 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM2,toid=115,use=1,z=1
group-5 1 2 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM2,toid=115,use=1,z=1
group-2 10 11 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=DRD2,toid=158,use=1,z=1
group-3 1 2 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=DRD2,toid=158,use=1,z=1
group-2 11 12 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=EGF,toid=164,use=1,z=1
group-3 2 3 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=EGF,toid=164,use=1,z=1
group-2 21 22 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-3 12 13 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-2 0 1 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1A,toid=21,use=1,z=1
group-1 0 1 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1A,toid=21,use=1,z=1
group-2 1 2 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1B,toid=22,use=1,z=1
group-1 1 2 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1B,toid=22,use=1,z=1
group-2 2 3 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1D,toid=23,use=1,z=1
group-1 2 3 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1D,toid=23,use=1,z=1

下面是我正在寻找的最终输出:

代码语言:javascript
复制
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-3 0 1 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM1,toid=114,use=1,z=1
group-5 0 1 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM1,toid=114,use=1,z=1
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM2,toid=115,use=1,z=1
group-5 1 2 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=CHRM2,toid=115,use=1,z=1
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=DRD2,toid=158,use=1,z=1
group-3 1 2 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=DRD2,toid=158,use=1,z=1
group-2 9 10 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=EGF,toid=164,use=1,z=1
group-3 2 3 text color=black,from=ABCB11,fromid=4,order=2,thickness=3,to=EGF,toid=164,use=1,z=1
group-2 21 22 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-3 12 13 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ACE,toid=11,use=1,z=1
group-2 21 22 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1A,toid=21,use=1,z=1
group-1 0 1 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1A,toid=21,use=1,z=1
group-2 21 22 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1B,toid=22,use=1,z=1
group-1 1 2 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1B,toid=22,use=1,z=1
group-2 21 22 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1D,toid=23,use=1,z=1
group-1 2 3 text color=black,from=ABCC8,fromid=5,order=2,thickness=3,to=ADRA1D,toid=23,use=1,z=1

此外,这只是一个样本data.So,许多对都会有group-1、group-4、group-5直到group 10。这里只提到来自较少组的对。

我想遍历这些行,直到"from=name“中的值保持不变,这样我就可以更改每个备用line.Code中的所有匹配项:

代码语言:javascript
复制
awk -F, 'NR%2==1 {split($2,a,"="); print a[2]}' file.txt

上面的代码能够提取交替行和"from=name“中的"name”。

EN

回答 1

Stack Overflow用户

发布于 2014-05-13 23:10:11

下面的代码非常冗长(我喜欢冗长的变量名)。使用你的样本数据,我得到了你想要的数据。假设每个“不均匀”的行都从第一行获得具有相同"from=xxxx“信息的值。

代码语言:javascript
复制
awk '
  BEGIN {
    namevar=""
    val1var=""
    val2var=""
    linenum=0
  }
  {
    split($0, linearr)
    split(linearr[5], csvarr, ",")
    if (namevar != csvarr[2]) {
      namevar=csvarr[2]
      val1var=linearr[2]
      val2var=linearr[3]
      linenum=0
    }
    linenum+=1
    if (linenum%2==1) {
      print linearr[1], val1var, val2var, linearr[4], linearr[5]
    } else {
      print linearr[1], linearr[2], linearr[3], linearr[4], linearr[5]
    }
  }' file.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23353884

复制
相关文章

相似问题

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