我有一个包含三列(制表符分隔)的输入数据,如下所示:

  a  mrna_185598_SGL 463
  b  mrna_9210_DLT   463
  c  mrna_9210_IND   463
  d  mrna_9210_INS   463
  e  mrna_9210_SGL   463

如何使用sed/awk将其修改为
四列数据如下:
a  mrna_185598 SGL   463
b  mrna_9210   DLT   463
c  mrna_9210   IND   463
d  mrna_9210   INS   463
e  mrna_9210   SGL   463

原则上我想把原始的“mrna”串分成两部分。

最佳答案

像这样的东西

awk 'BEGIN{FS=OFS="\t"}{split($2,a,"_"); $2=a[1]"_"a[2]"\t"a[3] }1'  file

输出
# ./shell.sh
a       mrna_185598     SGL     463
b       mrna_9210       DLT     463
c       mrna_9210       IND     463
d       mrna_9210       INS     463
e       mrna_9210       SGL     463

在solaris上使用nawk
如果你有猛击
while IFS=$'\t' read -r a b c
do
    front=${b%_*}
    back=${b##*_}
    printf "$a\t$front\t$back\t$c\n"
done <"file"

10-06 00:56