複数の数字をSedにパイプ

複数の数字をSedにパイプ

数値リストをsedにパイプできますか?

現在持っているパイプラインは次のとおりです。

grep -nP 'foo' file_full.txt | sort | awk -F'[:;\t]' '{print $1,$3,$9,$13}' 

出力:

2374 213 MID=212 GO=1
2462 213 MID=477 GO=137
2394 233 MID=232 GO=1
2464 233 MID=668 GO=1070
2185 24 MID=23 GO=1
2465 24 MID=752 GO=1083
2146 48 MID=354 GO=1010
1893 48 MID=47 GO=1
2219 58 MID=57 GO=1
2463 58 MID=595 GO=1057

私の主な目標は、$ 2で同じ値を確認してから$ 4またはGOの値を比較することです。 GO値の大きい行は削除する必要があります。

sed 's/GO=/& /' | sort -k2,2 -k5n | awk 'a[$2]++ {sub(/GO= /,"GO="); print $1}'前のパイプに次を追加すると、次のようになります。

2462
2464
2465
2146
2463

file_full.txt から削除する行番号のリストです。

私はsed -i '2462d;2464d;2465d;2146d;2463d' file_full.txtそれが可能であることを知っていますが、上記の各番号をsedコマンドにパイプする方法がわかりません。

私は何を逃したことがありませんか?


生データ:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  i0      i1      i2      i3      i4      i5      i6      i7      i8      i9      i10     i11     i12     i13     i14
1       1       .       A       T       1000    PASS    MID=0;S=0.0324764;DOM=0.5;PO=1;GO=1;MT=0;AC=200;DP=1000 GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       2       .       A       T       1000    PASS    MID=1;S=0.0125739;DOM=0.5;PO=1;GO=1;MT=5;AC=200;DP=1000 GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       3       .       A       T       1000    PASS    MID=2;S=-0.0693919;DOM=0.5;PO=1;GO=1;MT=9;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       4       .       A       T       1000    PASS    MID=3;S=0.0611535;DOM=0.5;PO=1;GO=1;MT=12;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       5       .       A       T       1000    PASS    MID=4;S=-0.0791182;DOM=0.5;PO=1;GO=1;MT=16;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       6       .       A       T       1000    PASS    MID=5;S=0.0463103;DOM=0.5;PO=1;GO=1;MT=21;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       7       .       A       T       1000    PASS    MID=6;S=0.0509527;DOM=0.5;PO=1;GO=1;MT=25;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       8       .       A       T       1000    PASS    MID=7;S=-0.0134404;DOM=0.5;PO=1;GO=1;MT=28;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       9       .       A       T       1000    PASS    MID=8;S=-0.00478324;DOM=0.5;PO=1;GO=1;MT=32;AC=200;DP=1000      GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       10      .       A       T       1000    PASS    MID=9;S=0.03588;DOM=0.5;PO=1;GO=1;MT=36;AC=200;DP=1000  GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       11      .       A       T       1000    PASS    MID=10;S=-0.028843;DOM=0.5;PO=1;GO=1;MT=41;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       12      .       A       T       1000    PASS    MID=11;S=-0.0832497;DOM=0.5;PO=1;GO=1;MT=45;AC=200;DP=1000      GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       13      .       A       T       1000    PASS    MID=12;S=0.0389281;DOM=0.5;PO=1;GO=1;MT=48;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       14      .       A       T       1000    PASS    MID=13;S=0.0362106;DOM=0.5;PO=1;GO=1;MT=53;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       15      .       A       T       1000    PASS    MID=14;S=0.0375309;DOM=0.5;PO=1;GO=1;MT=57;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       16      .       A       T       1000    PASS    MID=15;S=0.0112808;DOM=0.5;PO=1;GO=1;MT=60;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       17      .       A       T       1000    PASS    MID=16;S=0.0243286;DOM=0.5;PO=1;GO=1;MT=65;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       18      .       A       T       1000    PASS    MID=17;S=0.0596463;DOM=0.5;PO=1;GO=1;MT=69;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       24      .       A       T       1000    PASS    MID=23;S=-0.0086571;DOM=0.5;PO=1;GO=1;MT=92;AC=199;DP=1000;MULTIALLELIC GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       58      .       A       T       1000    PASS    MID=57;S=-0.0926969;DOM=0.5;PO=1;GO=1;MT=229;AC=198;DP=1000;MULTIALLELIC        GT      1|1     0|1     1|1     1|1     0|1     1|1
1       213     .       A       T       1000    PASS    MID=212;S=-0.0925562;DOM=0.5;PO=1;GO=1;MT=848;AC=196;DP=1000;MULTIALLELIC       GT      1|1     1|1     1|1     1|1     1|1     1|1
1       233     .       A       T       1000    PASS    MID=232;S=-0.0868037;DOM=0.5;PO=1;GO=1;MT=929;AC=199;DP=1000;MULTIALLELIC       GT      1|1     1|1     1|1     1|1     1|1     1|1
1       213     .       A       T       1000    PASS    MID=477;S=0.0600971;DOM=0.5;PO=1;GO=1037;MT=849;AC=4;DP=1000;MULTIALLELIC       GT      0|0     0|0     0|0     0|0     0|0     0|0
1       58      .       A       T       1000    PASS    MID=595;S=0.0450203;DOM=0.5;PO=1;GO=1057;MT=228;AC=2;DP=1000;MULTIALLELIC       GT      0|0     1|0     0|0     0|0     1|0     0|0
1       233     .       A       T       1000    PASS    MID=668;S=-0.0447337;DOM=0.5;PO=1;GO=1070;MT=928;AC=1;DP=1000;MULTIALLELIC      GT      0|0     0|0     0|0     0|0     0|0     0|0
1       24      .       A       T       1000    PASS    MID=752;S=-0.104791;DOM=0.5;PO=1;GO=1083;MT=93;AC=1;DP=1000;MULTIALLELIC        GT      0|0     0|0     0|0     0|0     0|0     0|0

ベストアンサー1

残念ながら、あなたの生データを見ることはできません。というファイルにパイピング結果が与えられると、file正しい結果が得られます。

$ sort -t ' ' -k2,2 -k4.4n file | sort -u -k2,2
2374 213 MID=212 GO=1
2394 233 MID=232 GO=1
2185 24 MID=23 GO=1
1893 48 MID=47 GO=1
2219 58 MID=57 GO=1

これはGO、各グループの最小値を持つデータの行です(2番目のフィールドはグループを定義します)。

1つ目は、各グループの値が小さいものから大きいものの順にソートさsortれるようにデータをソートすることです。GOそれ-k4.4n しなければならないカンマ以外の点があります。実際を指定します4番目のフィールド以下は、=セカンダリソートキーです。

2番目は、sort2番目のフィールドのグループ番号を使用して一意にソートします。これは、出力内の各一意のグループの最初の行のみを維持する効果があります。


後で質問に追加された元のデータを使用して:

sed 's/\./;./' file |
sort -t ';' -k1,1 -k6.4,6n |
sort -u -t ';' -k1,1 |
sed 's/;\././' |
sort -k1,1n -k2,2n

最初の2つsortの呼び出しは、この回答の前半と同じことを行います。ここでは、最初の2つの列(染色体と位置)を「グループキー」として使用します。

最初はsed3列の点を;.。これは;、両方の呼び出しでフィールド区切り文字として正しく使用するためのものですsort。 2番目sedの呼び出しは元のポイントを復元します。

最終sortデータは最初から染色体と位置によってソートされます。

これにより

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  i0      i1      i2      i3      i4      i5      i6      i7      i8      i9      i10     i11     i12     i13     i14
1       1       .       A       T       1000    PASS    MID=0;S=0.0324764;DOM=0.5;PO=1;GO=1;MT=0;AC=200;DP=1000 GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       2       .       A       T       1000    PASS    MID=1;S=0.0125739;DOM=0.5;PO=1;GO=1;MT=5;AC=200;DP=1000 GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       3       .       A       T       1000    PASS    MID=2;S=-0.0693919;DOM=0.5;PO=1;GO=1;MT=9;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       4       .       A       T       1000    PASS    MID=3;S=0.0611535;DOM=0.5;PO=1;GO=1;MT=12;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       5       .       A       T       1000    PASS    MID=4;S=-0.0791182;DOM=0.5;PO=1;GO=1;MT=16;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       6       .       A       T       1000    PASS    MID=5;S=0.0463103;DOM=0.5;PO=1;GO=1;MT=21;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       7       .       A       T       1000    PASS    MID=6;S=0.0509527;DOM=0.5;PO=1;GO=1;MT=25;AC=200;DP=1000        GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       8       .       A       T       1000    PASS    MID=7;S=-0.0134404;DOM=0.5;PO=1;GO=1;MT=28;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       9       .       A       T       1000    PASS    MID=8;S=-0.00478324;DOM=0.5;PO=1;GO=1;MT=32;AC=200;DP=1000      GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       10      .       A       T       1000    PASS    MID=9;S=0.03588;DOM=0.5;PO=1;GO=1;MT=36;AC=200;DP=1000  GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       11      .       A       T       1000    PASS    MID=10;S=-0.028843;DOM=0.5;PO=1;GO=1;MT=41;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       12      .       A       T       1000    PASS    MID=11;S=-0.0832497;DOM=0.5;PO=1;GO=1;MT=45;AC=200;DP=1000      GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       13      .       A       T       1000    PASS    MID=12;S=0.0389281;DOM=0.5;PO=1;GO=1;MT=48;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       14      .       A       T       1000    PASS    MID=13;S=0.0362106;DOM=0.5;PO=1;GO=1;MT=53;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       15      .       A       T       1000    PASS    MID=14;S=0.0375309;DOM=0.5;PO=1;GO=1;MT=57;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       16      .       A       T       1000    PASS    MID=15;S=0.0112808;DOM=0.5;PO=1;GO=1;MT=60;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       17      .       A       T       1000    PASS    MID=16;S=0.0243286;DOM=0.5;PO=1;GO=1;MT=65;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       18      .       A       T       1000    PASS    MID=17;S=0.0596463;DOM=0.5;PO=1;GO=1;MT=69;AC=200;DP=1000       GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       24      .       A       T       1000    PASS    MID=23;S=-0.0086571;DOM=0.5;PO=1;GO=1;MT=92;AC=199;DP=1000;MULTIALLELIC GT      1|1     1|1     1|1     1|1     1|1     1|1     1|1
1       58      .       A       T       1000    PASS    MID=57;S=-0.0926969;DOM=0.5;PO=1;GO=1;MT=229;AC=198;DP=1000;MULTIALLELIC        GT      1|1     0|1     1|1     1|1     0|1     1|1
1       213     .       A       T       1000    PASS    MID=212;S=-0.0925562;DOM=0.5;PO=1;GO=1;MT=848;AC=196;DP=1000;MULTIALLELIC       GT      1|1     1|1     1|1     1|1     1|1     1|1
1       233     .       A       T       1000    PASS    MID=232;S=-0.0868037;DOM=0.5;PO=1;GO=1;MT=929;AC=199;DP=1000;MULTIALLELIC       GT      1|1     1|1     1|1     1|1     1|1     1|1

抜粋行番号パイプラインから削除しようとしているのは通常、そのような操作を実行する誤った方法です。パイプラインの各部分は、同じパイプラインの他のすべての部分と同時に実行されます。これは、あるセクションでファイルを上書きまたは変更すると同時に他のセクションでファイルを読み取ることができないことを意味します。

また、パイプラインのさまざまな手順でデータをインポートすると、転送されていないデータが失われることに注意してください。これにより、単一のパイプラインが元のデータを変更できるようにすることがより困難になります(パイプラインを通過する間にデータが失われるため)。

したがって、解決策は、削除する必要があるものを抽出または計算するのではなく、保持する必要があるデータビットを渡すことです。

おすすめ記事