当 awk 中的行不以“#”开头时打印模式

当 awk 中的行不以“#”开头时打印模式

我想在文件中不以“#”开头的每一行的开头打印“chr”。

输入 :

##toto
#titi
16
17

输出 :

##toto
#titi
chr16
chr17

我尝试过使用 awk ( awk '$1 ~ /^#/ ...) 或 grep ( grep "^[^#]" ...) 但没有成功。我怎样才能做到这一点?

答案1

我认为你需要^[^#]意义,从一个不是的字符开始#,并通过前缀重建这些行"chr"

awk '/^[^#]/{ $0 = "chr"$0 }1'

答案2

使用sed

sed '/^#/! s/.*/chr&/'

答案3

命令

awk '{if(!/^#/ && !/^$/){$0="chr"$0;print}else if (/^#/ && !/^$/){print $0}}' filename

输出

##toto
#titi
chr16
chr17

Python

#!/usr/bin/python
import re
k=re.compile(r'^#')
e=re.compile(r'^$')
p=open('filename','r')
for i in p:
    if not re.search(k,i)   and not re.search(e,i):
        print "chr{0}".format(i.strip())
    elif not re.search(e,i):
        print i.strip()

输出

##toto
#titi
chr16
chr17

相关内容