【发布时间】:2014-06-14 18:06:56
【问题描述】:
我是 Awk 编程的新手。我有一个关于操作文本文件的问题,这是在可视化软件中绘制某些基于网络的图像所必需的 (Circos http://circos.ca)
我有想要使用 awk/grep/sed 操作值的输入数据。 有 9 对(18 行)。5 对(前 10 行)用于“from=ABCB11”,4 对(后 8 行)用于“from =ABCC8”。我想要的是从第一对的第一行中提取值,并将其替换为其他对的每个交替行。 所以 group-2 的值是 9 10 ,它应该替换 group2 中所有出现的值。 第 2 组的下一个值为 28 29,应替换为 9 10。
停止应由“from=name”确定,即“from=ABCB11”。必须捕获表达式并在下一次出现时替换的行不必像本例那样属于第 2 组.它可能是第 3 组或第 4 组,直到第 10 组。所以第二组(“来自 =ABCC8”)可能属于第 4/5/6 组,而不是第 2 组。这只是一个巧合。
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
以下是最终输出,我正在寻找:
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
另外,这只是一个示例数据。这么多对将有 group-1、group-4、group-5 到第 10 组。这里只提到了来自较小组的对。
我想循环遍历这些行,直到“from=name”中的值保持不变,这样我就可以更改每个备用行中的所有出现。代码:
awk -F, 'NR%2==1 {split($2,a,"="); print a[2]}' file.txt
上面的代码能够提取出“from=name”中的替代行和“name”
【问题讨论】:
-
请展示您的尝试,以便我们帮助您解决问题。
-
组如何匹配?什么标准控制第一组第 2 组号码的停止位置和第二组第 2 组号码的开始位置?
-
停止应由“from=name”确定,即“from=ABCB11”。必须捕获表达式并在下一次出现时替换的行不必属于组- 2.可能是group-3或group-4,直到group-10。所以第二组可能属于group-4/5/6,不一定是group-2。这里只是巧合。
-
我建议您修改您的问题以减少“嘈杂”,在问题本身中包含Minimal, Complete, and Verifiable example 以及所有相关解释,而不是在评论中。
-
我已经包含了所有相关的解释,但是由于我是 awk 编程的新手,而且它看起来不是简单的解析问题。我正在研究如何循环直到某个值并替换相关事件,但发现它很棘手。