在 awk 中解析/操作

Ron*_*Ron 1 sed awk text-processing

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

我有输入数据,我想使用awk/grep/sed. 有 9 对(18 行)。5 对(前 10 行)用于“from=ABCB11”,4 对(接下来的 8 行)用于“from =ABCC8”。我想要的是从第一对的第一行中提取值,并在其他对的其余每一对中替换它。所以 group-2 的值是 9 10,它应该替换 group2 中所有出现的 value。组 2 的下一个值是 28 29,应替换为 9 10。

停靠点应由“from=name”确定,即“from=ABCB11”。在此实例中,必须从中捕获表达式并在其下一次出现时替换的行不必属于组 2。它可以是第 3 组或第 4 组,直到第 10 组。所以第二组(“来自 =ABCC8”)可能属于第 4/5/6 组,而不是第 2 组。这只是一个巧合,但是对于每个“from=”替代行,所有组编号都是相同的。

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
Run Code Online (Sandbox Code Playgroud)

以下是最终输出,我正在寻找:

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
Run Code Online (Sandbox Code Playgroud)

此外,这只是一个示例数据。如此多的对将有第 1 组、第 4 组、第 5 组到第 10 组。这里,仅提及来自较小组的对。

基本上,这些是在打印完整行时应该看到的修改,直到“from=ABCB11”结束,在每一行中。对于“from=ABCC8”也类似。

group-2 9 10
group-3 0 1
group-2 9 10
group-5 0 1
group-2 9 10
.........
.........
.........
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

我想遍历这些行,直到“from=name”中的值保持不变,这样我就可以更改每个备用行中出现的所有内容。代码:

awk -F, 'NR%2==1 {split($2,a,"="); print a[2]}' file.txt
Run Code Online (Sandbox Code Playgroud)

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

Scr*_*zer 5

尝试类似:

awk 'NR%2{if(p!=$2){v=$1; p=$2}$1=v}1' FS=, OFS=, file
Run Code Online (Sandbox Code Playgroud)

这测试是否$2已更改并替换$1每个奇数行,每个奇数行都具有相同的值$2


添加了说明..

awk '
  NR%2 {            # On every line where NR (recordnr) mod 2 equals 1 (odd line)
    if(p!=$2) {     # If the variable p (previous) is different from the 2nd field then
      v=$1          # The new value v should become $1 (1st field)
      p=$2          # The new variable p becomes the current field 2
    }               #
    $1=v            # On every odd line field 1 becomes the previously set value
  }
  1                 # 1 means true. The default action is to print the record (line)
' FS=, OFS=, file   # Set the input and output field separators to a comma.
Run Code Online (Sandbox Code Playgroud)