次のファイルがあります。
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