Shell 删除列中的特定字符

Shell 删除列中的特定字符,shell,Shell,我有一个文件: col1 col2 col3 118566815 comp120568_c0_seq1_xn1_una_478__176 176 118588302 100034943_0__140 140 118575711 100079758_0__55 55 118545625 10009810_0__57 57 我要做的是删除第2列中_uu之后的字符,以获得所需的输出: col1 col2 col3 118566815 com

我有一个文件:

col1    col2    col3
118566815   comp120568_c0_seq1_xn1_una_478__176 176
118588302   100034943_0__140    140
118575711   100079758_0__55 55
118545625   10009810_0__57  57
我要做的是删除第2列中_uu之后的字符,以获得所需的输出:

col1    col2    col3
    118566815   comp120568_c0_seq1_xn1_una_478  176
    118588302   100034943_0 140
    118575711   100079758_0 55
    118545625   10009810_0  57
有什么建议吗

awk '{split($2,a,/__/);$2=a[1]}1' input
输出:

col1 col2 col3
118566815 comp120568_c0_seq1_xn1_una_478 176
118588302 100034943_0 140
118575711 100079758_0 55
118545625 10009810_0 57
在问问题之前一定要搜索网站:)你可以找到类似的问题

输出:

col1 col2 col3
118566815 comp120568_c0_seq1_xn1_una_478 176
118588302 100034943_0 140
118575711 100079758_0 55
118545625 10009810_0 57

在提问之前一定要搜索网站:)你可以找到一个类似的问题。

如前所述,用一个双下划线分隔最后一组要删除的数字,你也可以用
sed
简单地完成:

$ sed 's/__[^ \t]*//' file
col1    col2    col3
118566815   comp120568_c0_seq1_xn1_una_478 176
118588302   100034943_0    140
118575711   100079758_0 55
118545625   10009810_0  57
解释

  • sed's/find/replace/”
    是通用的
    sed
    替换

  • \uuu[^\ t]*
    find-两个下划线和后面的所有字符不是
    空格
    选项卡

  • 无需替换


  • 注意:这仅适用于分隔最后一组数字的双下划线。

    如前所述,如果使用双下划线分隔要删除的最后一组数字,您也可以使用
    sed
    简单地执行此操作:

    $ sed 's/__[^ \t]*//' file
    col1    col2    col3
    118566815   comp120568_c0_seq1_xn1_una_478 176
    118588302   100034943_0    140
    118575711   100079758_0 55
    118545625   10009810_0  57
    
    解释

  • sed's/find/replace/”
    是通用的
    sed
    替换

  • \uuu[^\ t]*
    find-两个下划线和后面的所有字符不是
    空格
    选项卡

  • 无需替换

  • 注意:这仅适用于分隔最后一组数字的双下划线。

    说明:

    第一个子项删除双下划线和以下字符 在零点前面,保持零点完好无损。为了让它工作,我必须 指出所涉及的字段

    第二个子段从下划线开始,但这里我们留下了一个空格

        awk '{sub(/0__.*/,"0",$2)sub(/__176/," ")}1' file
    
        col1    col2    col3
        118566815   comp120568_c0_seq1_xn1_una_478  176
        118588302 100034943_0 140
        118575711 100079758_0 55
        118545625 10009810_0 57
    
    说明:

    第一个子项删除双下划线和以下字符 在零点前面,保持零点完好无损。为了让它工作,我必须 指出所涉及的字段

    第二个子段从下划线开始,但这里我们留下了一个空格

        awk '{sub(/0__.*/,"0",$2)sub(/__176/," ")}1' file
    
        col1    col2    col3
        118566815   comp120568_c0_seq1_xn1_una_478  176
        118588302 100034943_0 140
        118575711 100079758_0 55
        118545625 10009810_0 57
    

    嗨,欢迎来到stack overflow。有关如何提问和相应更新问题的更多详细信息,请参阅链接。您好,欢迎使用stack overflow。有关如何提问和相应更新问题的更多详细信息,请参阅该链接。不要回答问题,然后暗示它是重复的。不要回答问题,然后暗示它是重复的。是否要用一些解释来补充您的“仅代码”答案?是否要补充您的“仅代码”答案有什么解释吗?