我仍在学习Linux命令,我想知道是否有人可以帮助我完成我想做的事情:我有一个像这样的文件:
3 rs123 0 600001 A G
3 rs345 0 600002 T G
3 3:124369637:A_G 0 124369637 A G
3 3:124369637:G_GT 0 124369637 G GT
而且,仅当第5列和第6列的长度大于1时,我才尝试用“ ID”替换第二次出现的冒号,而如果长度为1,则需要删除第二次出现的冒号之后的所有内容。冒号。所以我想这样:
3 rs123 0 600001 A G
3 rs345 0 600002 T G
3 3:124369637 0 124369637 A G
3 3:124369637:ID 0 124369637 G GT
我已经尝试了几种方法,虽然可以达到某种程度,但是我坚持最后一部分。另外,我现在所看到的似乎是漫长而扭曲的。任何建议都非常感谢!谢谢!
首先,我将“:ID”添加到所有格式为3:124369637的情况下:
awk -F' ' '//{gsub(/[:][A-Za-z].*/, ":ID", $2); print} file.txt
然后,我尝试仅在第5列和第6列的长度大于1的情况下保留ID(但这不起作用):
awk -F' ' '{
if (length($5) ==1 && length($6) ==1 && $2 ~/ID/ )
gsub(/ID/,"");print;
else
print;
}' file.txt
awk -v OFS='\t' '
{
if (length($5) == 1 && length($6) == 1 )
{
sub(/:[^:]*$/, "", $2)
print
}
else if ( length($5) >= 1 && length($6) >= 1 )
{
sub(/:[^:]*$/, ":ID", $2)
print
}
else
print
}'
file.txt
试试这个。您可能要修改替换logit,我想每行至少有两个冒号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句