在特定列中,我需要用“X”替换行,但前提是它们与 3 种可能的模式(3 个变量)中的任何一种都不匹配。请注意,列并不总是相同的列,因此代码必须使用列号本身作为变量号。对于 3 种可能的模式也可以这样说。没有演示很难解释。在示例中,如果您查看第 1 列并查看它如何根据“GrabVariantOption”将特定列更改为“X”,那么它可能比我能解释的任何内容都更清楚。
示例输入:
A,A,A,X
A,G,T,X
C,A,G,T
A,C,G,T
f,X,A,g
g,T,A,A
m,s,G,A
G,s,m,A
示例 3 可能的模式:
GrabVariantOption1=A
GrabVariantOption2=g
GrabVariantOption3=G
一些伪代码,这是我想做的一种原则:
Column=1
awk -F ',' -v a=$GrabVariantOption1 -v b=$GrabVariantOption2 -v c=$GrabVariantOption3 -v x=$Column '{$x; if NR!=a && NR!=b && NR!=c; flag=1} {if flag=1 NR==X }'
示例输出:
A,A,A,X
A,G,T,X
X,A,G,T
A,C,G,T
X,X,A,g
g,T,A,A
X,s,G,A
G,s,m,A
或者在这里,因为它们是单个 ASCII 字母:
NR
是一个特殊变量,awk
其中保存当前记录号(此处为行号,带有默认记录分隔符)。$
是取消引用字段的运算符。因此,如果x
字段编号$ x
为您提供x
第 th字段的内容。另外的选择:
尝试这个,
这是使用扩展正则表达式的 Gnu sed 查看 pbm 的一种方法:
使用 Perl 你也可以这样做: