仅从第一列删除模式

仅从第一列删除模式

我有以下信息:

'>16_R_I_1_0 M01230:42:000000000-AWMRD:1:1101:15012:1778 1:N:0:0 orig_bc=CGGAGCTATGGT new_bc=CGGAGCTATGGT bc_diffs=0  
'>0_V_I_2_2 M01230:42:000000000-AWMRD:1:1101:16237:1790 1:N:0:0 orig_bc=CTAGCGAACATC new_bc=CTAGCGAACATC bc_diffs=0

我只想从第一列中删除“_”。我使用了这样的命令: sed "$1=/s/\_//g",但它不起作用。我想要这样的输出:

'>16RI10 M01230:42:000000000-AWMRD:1:1101:15012:1778 1:N:0:0 orig_bc=CGGAGCTATGGT new_bc=CGGAGCTATGGT bc_diffs=0  
'>0VI22 M01230:42:000000000-AWMRD:1:1101:16237:1790 1:N:0:0 orig_bc=CTAGCGAACATC new_bc=CTAGCGAACATC bc_diffs=0

有什么建议请

答案1

awk '{ gsub("_", "", $1); print }'

解释:

awk '{                         for each line
      gsub(                    globally replace
           "_", ""             underscore by the empty string
           $1);                in the first column
      print                    and print the modified line
     }'

答案2

sed -e ':a;s/^\( *[^ _]*\)_/\1/;ta' data.genefile

_仅从输入基因文件中的第一个字段中删除所有内容。


珀尔

perl -F'(\s+)' -lne 'print map { /\S/ && !$a++ && s/_//g; $_ } @F' datagene.txt

解释

  • -F'(\s+)'=> FS= 一个或多个空格。括号修改了行为,因为现在字段数组@F包含中间的空格,在正常情况下该空格会丢失。我们这样做是为了在更改之前和之后维护whitesoace。
  • map { ... }@F命令逐一对字段数组元素进行操作,并放置布尔逻辑以确保仅对第一个非空字段进行操作。

答案3

sed 'h;s/ .*//;s/_//g;G;s/\n[^ ]*//'

说明:h复制保留空间中的行,第一个s删除除第一个字段之外的所有内容,第二个执行所需的替换。然后附加保留空间G并删除第一个字段的换行符。完毕。

相关内容