私は次の情報を持っています:
'>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
= 1つ以上のスペース。フィールド配列には@F
通常の状況で失われる中間スペースが含まれるため、括弧は動作を修正します。我々は、変更の前後にホワイトソースを維持するためにこれを行います。map { ... }
@F
このコマンドは、フィールド配列要素に対して1つずつ動作し、空でない最初のフィールドのみが機能するようにブール論理を配置します。
答え3
sed 'h;s/ .*//;s/_//g;G;s/\n[^ ]*//'
説明:h
予約済みスペースに行をコピーします。最初はs
最初のフィールドを除くすべてを削除し、2番目は必要な交換を実行します。次に、予約済みスペースを追加し、G
最初のフィールドの改行文字を削除します。完璧。