Linux命令以条件替换模式

用户971102

我仍在学习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
zhujs
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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用sed命令替换模式

来自分类Dev

用命令替换sed模式

来自分类Dev

Linux命令变量替换

来自分类Dev

Linux命令替换顺序

来自分类Dev

排除模式和条件替换

来自分类Dev

替换命令条件以替换字符串

来自分类Dev

Perl/Sed 命令多次替换相同的模式

来自分类Dev

Linux chmod命令错误:chmod:无效模式:

来自分类Dev

Vim中命令行模式(ex模式)中的命令替换

来自分类Dev

sed命令-查找并替换,同时排除查找中的特定模式

来自分类Dev

vi模式下的命令行:全部替换

来自分类Dev

使用命令替换可以解决什么问题/模式?

来自分类Dev

使用命令替换生成全局模式的嵌套部分

来自分类Dev

使用 sed 命令用模式替换多行字符串

来自分类Dev

根据条件替换字符串中的匹配模式

来自分类Dev

在sed替换期间如何使用包含条件模式的通配符?

来自分类Dev

替换命令,除非有条件

来自分类Dev

替换命令,除非有条件

来自分类Dev

命令替换在循环条件下不起作用

来自分类Dev

模式替换

来自分类Dev

cat命令替换文本Linux shell脚本

来自分类Dev

SED Linux命令替换成一行

来自分类Dev

哪个LINUX命令用于“剪切和替换列”任务?

来自分类Dev

一行中间的文本替换(Linux命令)

来自分类Dev

使用 awk sed linux 命令用原件替换 PO msgstr

来自分类Dev

使用后台模式和多个命令设置linux别名

来自分类Dev

linux命令以不同的方式处理模式前后的部分行

来自分类Dev

Alpine docker image +755 无效模式下的Linux命令

来自分类Dev

条件模式