从一列中删除字符串元素

时间:2018-03-15 18:50:24

标签: awk sed

我有一个输入文件。第三列的第一个字符串将始终是第四列。我想从第一列中删除第三列字符串。

输入格式为

7    6502549    TA        T
7    6502822    GAAGAA    G
17   8347553    TAA       T
17   8354321    CG        C
17   8363312    CCTT      C
17   8366613    AAT       A
17   8366623    CCTTT     C

所需的输出是

    7    6502549    A        T
    7    6502822    AAGAA    G
    17   8347553    AA       T
    17   8354321    G        C
    17   8363312    CTT      C
    17   8366613    AT       A
    17   8366623    CTTT     C

4 个答案:

答案 0 :(得分:1)

<强> AWK

awk -v OFS="\t" '{sub($4,"",$3)}1' f1
7   6502549 A   T
7   6502822 AAGAA   G
17  8347553 AA  T
17  8354321 G   C
17  8363312 CTT C
17  8366613 AT  A
17  8366623 CTTT    C

sub($4,"",$3)sub将使用空字符替换第四个字段第一个出现在第三个字段中

答案 1 :(得分:0)

awk救援!

如果不匹配,则不进行替换......

$ awk '{sub("^"$4,"",$3)}1' file | column -t

7   6502549  A      T
7   6502822  AAGAA  G
17  8347553  AA     T
17  8354321  G      C
17  8363312  CTT    C
17  8366613  AT     A
17  8366623  CTTT   C

答案 2 :(得分:0)

如果您的数据有效且第3列的第一个字符始终是第4列,则可以使用substr删除第3列的第一个字符:

awk '{print $1,$2,substr($3,2),$4}' in.txt

答案 3 :(得分:0)

如果解决方案不必是sed或awk,请使用cut:

cut --complement -c 17

样本输入的输出:

7    6502549    A        T
7    6502822    AAGAA    G
17   8347553    AA       T
17   8354321    G        C
17   8363312    CTT      C
17   8366613    AT       A
17   8366623    CTTT     C

说明: 剪掉第17个字符-c 17 但是反转选择以打印--complement

(注意:这个答案有点具有挑衅性。在特殊情况下触发OP的一些详细说明也没有什么坏处,例如,当没有身份或空行或行与静态模式不匹配时这适用于所有显示的样本输入行。)

相关问题