我还在学习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
我试图在第二次出现结肠后用" ID"替换任何东西。只有当第5列和第6列的长度大于1时,如果长度为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
然后我尝试将此ID保留仅用于第5列和第6列的长度> 1的情况(但这不起作用):
awk -F' ' '{
if (length($5) ==1 && length($6) ==1 && $2 ~/ID/ )
gsub(/ID/,"");print;
else
print;
}' file.txt
答案 0 :(得分:2)
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,我想每行至少有两个冒号。