linux - 使用 sed/awk 按列修改文本

标签 linux unix sed awk text-processing

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

  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/

相关文章:

linux - 如何运行一个 shell 来停止当前进程?

linux - 如何在 vi 编辑器中一次搜索 3 个字符串?

bash - 如何重复包含标记段的所有行,以便在 BASH 中的每一行上只显示一个段标记?

linux - 有没有办法在 Unix 中删除文件中的重复 header ?

linux - 如何使文件对某些用户不可读?

linux - 合并第 1 列的结果 然后对第 2 列求和以列出第 1 列中每个条目的总数

linux - 从主机系统在虚拟机中运行命令

bash - 如何在当前 shell 中执行命令的输出?

linux - 无法将新文件夹名称附加到 UNIX 脚本中的现有路径

linux - 如何使用 awk 或 sed 在 bash 中调整列字段的长度?