我有以下信息:
'>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
并删除第一个字段的换行符。完毕。