首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed/awk逐列修改文本

使用sed/awk逐列修改文本
EN

Stack Overflow用户
提问于 2010-01-28 11:30:58
回答 7查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
  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将其修改为四列数据,如下所示:

代码语言:javascript
复制
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“字符串分成两部分。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-28 11:38:49

像这样的东西

代码语言:javascript
复制
awk 'BEGIN{FS=OFS="\t"}{split($2,a,"_"); $2=a[1]"_"a[2]"\t"a[3] }1'  file

输出

代码语言:javascript
复制
# ./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

代码语言:javascript
复制
while IFS=$'\t' read -r a b c
do
    front=${b%_*}
    back=${b##*_}
    printf "$a\t$front\t$back\t$c\n"
done <"file"
票数 2
EN

Stack Overflow用户

发布于 2010-01-28 11:37:21

gawk:

代码语言:javascript
复制
{
  print $1 "\t" gensub(/_/, "\t", 2, $2) "\t" $3
}
票数 2
EN

Stack Overflow用户

发布于 2010-01-28 11:40:04

只要它们看起来和你发布的没有太大的不同:

代码语言:javascript
复制
sed -E 's/mrna_([0-9]+)_/mrna_\1\t/'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2152115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档