【发布时间】:2021-03-29 07:31:25
【问题描述】:
我想找到这样的模式:当前行中的第 2 列是“C”,下一行中的第 2 列是“G”。文件的第4列是'CG'。我想比较第 1 到第 2、第 3 到第 4、第 5 到第 6,依此类推。然后打印几行当前行和下一行。 'C' 可以出现在偶数行和奇数行中。
这样输入:
chr1 C 10467 CHH CT 0.0 0 1
chr1 C 10469 CG CG 0.0 0 1
chr1 G 10470 CG CG 0.0 0 8
chr1 C 10471 CG CG 0.0 0 1
chr1 G 10472 CG CG 1.0 8 8
预期输出是,由制表符分隔:
chr1 C 10469 CG CG 0.0 0 1
chr1 G 10470 CG CG 0.0 0 8
chr1 C 10471 CG CG 0.0 0 1
chr1 G 10472 CG CG 1.0 8 8
我的代码是:
awk '{a=$2; c=$4; d=$0; e=NR; getline; f=$2; g=$4} {if (a == "C" && f == "G" && c == "CG" && g == "CG") {print d,e,"\n",$0,NR}}' input_file
我使用 getline 并检查下一行是否有“G”。问题是,如果我这样做,awk 将直接转到第三行,并且会错过一些行。 例如,输入的第 2 列是:
Line 1: G
Line 2: C
Line 3: G
Line 4: C
预期的输出是第 2 行和第 3 行。但是,awk 直接从第一行转到第三行,而不是逐行。所以,输出是无。
亲切的问候!
【问题讨论】:
-
文件的第 4 列是 'CG' 对于这两个记录还是只是后者?
-
嗨,James,第 4 列是两条记录的“CG”。
-
换个思路:比较当前行和上一行。
标签: awk