我想做的是搜索第一列不以“rs”或“chr”开头的行,然后如果这些行以数字开头,则将“chr”附加到第一列值,否则保持原样 -没有附加。
我有以下代码:
awk '((!($1 ~ /rs/ || $1 ~ /chr/)) && $1 ~ /^[[:0-9:]]|$/) {$1 = "chr"$1}1' filename > newfilename
这很好,但会将“chr”附加到所有不以“rs”或“chr”开头的第一列值。此列中有一些值我不想更改,这些值全部以字母 (az) 开头。我只想更改以数字(0-9)开头的值。
谢谢!
答案1
正如 Fiximan 的评论中已经提到的,查找数字会自动过滤掉“rs”和“chr”。因此,如果您想在以数字“chr”开头的行前添加“chr”,您可以执行以下操作:
awk '{if ($1 ~ /^[:0-9:]/) printf "chr%s\n", $0; else printf "%s\n", $0;}' filename > newfile
答案2
使用sed
sed 's/^[0-9]/chr&/' file