如果在sed命令中只有第一个字符匹配,则替换值

时间:2018-01-15 00:53:22

标签: sed

我试图用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

非常感谢您的帮助。

2 个答案:

答案 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