gpt4 book ai didi

用条件替换模式的 Linux 命令

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:07 26 4
gpt4 key购买 nike

我仍在学习 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,我想每一行至少有两个冒号。

关于用条件替换模式的 Linux 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com