我试图用N.A替换值,如果第一列小于或等于5意味着使用此命令在0和5之间:
sed -e '/^[0-5]/ s/2/N.A/g' snp.example.1 > result2
例如输入行,
4 2 0 0 2 0 0 2 0 2 0
转换为:
4 N.A 0 0 N.A 0 0 N.A 0 N.A 0
但是,它不是只检查第一个字符,而是查找第二个字符,并用N.A替换值。
例如输入行不应该更改,因为它的第一列包含的值(33)大于5:
33 2 2 2 2 2 2 2 2 2 2
但它也会被转换:
33 N.A N.A N.A N.A N.A N.A N.A N.A N.A N.A
非常感谢您的帮助。
答案 0 :(得分:3)
你可以用sed做到这一点,但awk似乎是进行数值比较的更好选择:
awk '$1 < 6{gsub("2","N.A")}1' input
答案 1 :(得分:2)
要将更改限制为第一个数字为5或更小的行,请尝试:
sed -e '/^[0-5] / s/2/N.A/g' example
请注意[0-5]
之后的空格。
例如,请考虑此输入文件:
$ cat example
4 2 0 0 2 0 0 2 0 2 0
33 2 2 2 2 2 2 2 2 2 2
我们的命令产生:
$ sed -e '/^[0-5] / s/2/N.A/g' example
4 N.A 0 0 N.A 0 0 N.A 0 N.A 0
33 2 2 2 2 2 2 2 2 2 2