我有一个包含三列(制表符分隔)的输入数据,如下所示:
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
如果你有 bash
while IFS=$'\t' read -r a b c
do
front=${b%_*}
back=${b##*_}
printf "$a\t$front\t$back\t$c\n"
done <"file"
关于linux - 使用 sed/awk 按列修改文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152115/