最初の列からのみパターンを削除

最初の列からのみパターンを削除

私は次の情報を持っています:

'>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最初のフィールドの改行文字を削除します。完璧。

関連情報