我有一个包含数百万行的文件,并且仅当字符串为“。”时,才想修改A列中的值。修改将添加"chr:"$2":"$3
到字符串的开头。所有其他行将被打印为原始版本。
输入示例:
A B C D E F G H
rs125 2 5433 T TACA A 3 2
chr2:4543 2 4543 I R 8 2
rs123 3 4332 A C 9 3
. 3 7654 I R 8
在上方,第4行以“。”开头。并需要更改为“ chr3:7654”。所有其他行都需要保持不变。
所需的输出:
A B C D E F G H
rs125 2 5433 T TACA A 3 2
chr2:4543 2 4543 I R 8 2
rs123 3 4332 A C 9 3
chr3:7654 3 7654 I R 8 2
到目前为止,我的代码仍然有效,但是即使“ rs ...”应保持不变,也可以将所有名称更改为以“ chr ...”开头。
awk '($1 ~ /^./) {$1 = "chr:"$2":"$3}1' filename > newfilename
这可能是一个非常简单的解决方案,但是却引起了很大的问题。谢谢!
您的问题是正则表达式。/^./
将与行首的任何有效字符匹配。您必须先转义.
才能从字面上进行匹配:
awk '$1 ~ /^\./ {$1 = "chr:"$2":"$3};1' filename > newfilename
但是最好只检查字符串是否相等,而不要进行正则表达式检查:
awk '$1 == "." {$1 = "chr:"$2":"$3};1' filename > newfilename
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句