sed キャプチャグループの使用

sed キャプチャグループの使用

次のファイルがあります。

chr1    3143567 3143568 .3-2704 1.000000|ENSMUSG00000102693.2
chr1    3143599 3143600 .3-2705 1.000000|ENSMUSG00000102693.2
chr1    3143631 3143632 .3-2706 1.000000|ENSMUSG00000102693.2
chr1    3143663 3143664 .3-2707 1.000000|ENSMUSG00000102693.2
chr1    3143695 3143696 .3-2708 1.000000|ENSMUSG00000102693.2
chr1    3143727 3143728 .3-2709 1.000000|ENSMUSG00000102693.2

最初の式より前のすべての項目をフィルタリングするために2つのsed式を作成しており|、結果ファイルの場合は、次のように後続のすべての項目を削除します.

sed -n -e 's/^.*|//p' original_file.txt > first_result.txt

sed -n -e 's/\..*//p' first_result.txt > final_result.txt

これらすべてを一行にどのように書くことができますか?

最終目的は取得である。ENSMUSG00000102693

ベストアンサー1

|コマンドを実行すると、文字を含まない行とマウスの遺伝子識別子にバージョン番号のない行が削除されます。これが意図的なものかどうかはわかりませんが、sed -nコマンドpでフラグを使用して作業する副作用ですs。私はこれが意図しないと仮定します。

2つの表現を使用してくださいsed

sed -e 's/.*|//' -e 's/\..*//' file >newfile

grep非標準オプションでコマンドを使用し、ファイル-oからすべてのEnsemblマウス遺伝子安定IDのみを抽出するとします(ファイルには抽出する安定IDのみが含まれています)。

grep -o 'ENSMUSG[[:digit:]]*' file >newfile

2つのチェーンコマンドを使用することもできますcut。各コマンドは、sedこの回答の前の2つの置換と同様にデータを変更します。静的クリッピングを使用する方が正規表現を使用するよりも高速になる可能性がありますが、入力データが大きくない場合は速度差は大きくないと予想されます。

cut -d '|' -f 2 file | cut -d '.' -f 1 >newfile

おすすめ記事