我有一个输入文件。第三列的第一个字符串将始终是第四列。我想从第一列中删除第三列字符串。
输入格式为
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
答案 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的一些详细说明也没有什么坏处,例如,当没有身份或空行或行与静态模式不匹配时这适用于所有显示的样本输入行。)