sedコマンドラインを使用して列からパターンを削除する方法は?

sedコマンドラインを使用して列からパターンを削除する方法は?

以下の表があります。

"baseMean"  "log2FoldChange"    "lfcSE" "stat"  "pvalue"    "padj"
"ENSG00000000003.14"    11.3434183210348    0.753849141787545   0.682104979689654   1.10518052826785    0.269081372382168   0.999928163137131
"ENSG00000000419.12"    793.733816508413    -0.256066185652526  0.133681398896401   -1.91549600592503   0.0554292780227467  0.863889514659372
"ENSG00000000457.13"    948.240987147508    -0.088027064401221  0.0869481579436567  -1.01240861776811   0.3113427195966

.X最初の列の引用符とパターンを削除したいです。私の言葉はこれです:

"baseMean"  "log2FoldChange"    "lfcSE" "stat"  "pvalue"    "padj"
ENSG00000000003 11.3434183210348    0.753849141787545   0.682104979689654   1.10518052826785    0.269081372382168   0.999928163137131
ENSG00000000419 793.733816508413    -0.256066185652526  0.133681398896401   -1.91549600592503   0.0554292780227467  0.863889514659372
ENSG00000000457 948.240987147508    -0.088027064401221  0.0869481579436567  -1.01240861776811   0.3113427195966

このような場合、sedや他の手段を使用してコマンドラインを作成できますか?

答え1

使用sed:

$ echo \"ENSG00000009694.13\" 3.25851232080741 0.670268379884225 | sed -E "s|\"(.+?)\.[0-9]*\"|\1|g"
ENSG00000009694 3.25851232080741 0.670268379884225

私はあなたが扱っているのが巨大なログファイルだと思います。この場合、以下を使用できます。

$ sed -E "s|\"(.+?)\.[0-9]*\"|\1|g" your_file.txt
"baseMean"  "log2FoldChange"    "lfcSE" "stat"  "pvalue"    "padj"
ENSG00000000003    11.3434183210348    0.753849141787545   0.682104979689654   1.10518052826785    0.269081372382168   0.999928163137131

sed結果を印刷します。 「内部モード」を示すために-i前に-E。を追加することもできるので、sedはファイルを直接変更します。-i

説明する:

私はsedの「検索と置換」機能を使用しています。基本的な構文は次のとおりです。

sed -E "s|p1|p2|g"

その後、 sed は「拡張正規表現パターン」を意味する . を置き換えるので、複雑なp1正規表現になります。p2-Ep1

ここに私のものp1(今は省略)

\".+?\.[0-9]*\"

~へ

  • \"引用符の一致、
  • \.[0-9]*Macesパターンはドットで始まり、その後に0から無限大までの数字が続きます。
  • .+?その間にどのようなパターンで作業してください。

thenはp2、単に\1ペアの最初の文字列を表すaです。完成!()p1

答え2

awk 'NR>1{gsub(/\"/,"",$0);gsub(/\.[0-9]*/,"",$1)}1' filename

出力

"baseMean"  "log2FoldChange"    "lfcSE" "stat"  "pvalue"    "padj"
ENSG00000000003 11.3434183210348 0.753849141787545 0.682104979689654 1.10518052826785 0.269081372382168 0.999928163137131
ENSG00000000419 793.733816508413 -0.256066185652526 0.133681398896401 -1.91549600592503 0.0554292780227467 0.863889514659372
ENSG00000000457 948.240987147508 -0.088027064401221 0.0869481579436567 -1.01240861776811 0.3113427195966

答え3

$ sed 's/^"\(ENS[[:alnum:]]*\)\..*"/"\1"/' file
"baseMean"  "log2FoldChange"    "lfcSE" "stat"  "pvalue"    "padj"
"ENSG00000000003"    11.3434183210348    0.753849141787545   0.682104979689654   1.10518052826785    0.269081372382168   0.999928163137131
"ENSG00000000419"    793.733816508413    -0.256066185652526  0.133681398896401   -1.91549600592503   0.0554292780227467  0.863889514659372
"ENSG00000000457"    948.240987147508    -0.088027064401221  0.0869481579436567  -1.01240861776811   0.3113427195966

上記のコマンドは、sed最初の列のEnsembl stable IDからのみバージョンを削除します。"ENS行の先頭を一致させ、その後に任意の数の英数字、ドット、および引用符以外の文字を一致させることでこれを行います。ドットや引用符以外の文字を削除するには、置換を使用します。

二重引用符も削除するには、代替テキストをからに変更"\1"します\1

安定したIDに常にバージョンが添付されていると確信している場合は、ドットと二重引用符の間の最初の部分文字列のみを削除する次の式に短縮できます。

$ sed 's/\..*"/"/' file
"baseMean"  "log2FoldChange"    "lfcSE" "stat"  "pvalue"    "padj"
"ENSG00000000003"    11.3434183210348    0.753849141787545   0.682104979689654   1.10518052826785    0.269081372382168   0.999928163137131
"ENSG00000000419"    793.733816508413    -0.256066185652526  0.133681398896401   -1.91549600592503   0.0554292780227467  0.863889514659372
"ENSG00000000457"    948.240987147508    -0.088027064401221  0.0869481579436567  -1.01240861776811   0.3113427195966

引用符を削除する必要がありますか?2,$ s/"//gたとえば、式を使用して削除できます。

sed -e 's/\..*"/"/' -e '2,$ s/"//g' file

または、すべてを直接渡してtr -d '"'すべての引用符を削除できます。

sed 's/\..*"/"/' file | tr -d '"'

関連情報