ファイルを複数回コピーする、重複ファイルを書き込む、ファイルを並べ替える、並べ替え後の特定の行の位置を計算する

ファイルを複数回コピーする、重複ファイルを書き込む、ファイルを並べ替える、並べ替え後の特定の行の位置を計算する

詳しく説明する前に、この質問の一部をすでに質問していることを指摘したいと思います。 ->ここで見つけることができます。。いくつかの良い回答を受けましたが、もっと多くのことをする必要があるので、今回は質問を繰り返して詳細を追加します。

そのため、次のような独自のコンテンツを含むファイルがあります(と呼びますmyUniqueFile)。

chromosoom  start    end       phylop   GPS
chr1    28745756    28745756    7.905   5   
chr1    31227215    31227215    10.263  5
chr1    47562402    47562402    2.322   4
chr1    64859630    64859630    1.714   3
chr1    70805699    70805699    1.913   2
chr1    89760653    89760653    -0.1    0
chr1    95630169    95630169    -1.651  -1

ご覧のとおり、これらは異なるスコアの異なる場所です。

次のような別のファイルがありますmyDuplicationFile

chromosoom  start    end       phylop   GPS
chr3    15540407    15540407    -1.391  -1
chr3    30648039    30648039    2.214   3
chr3    31663820    31663820    0.713   3
chr3    33093371    33093371    3.753   4
chr3    37050398    37050398    1.650   2
chr3    38053456    38053456    1.1     1
chr3    39597927    39597927    8.721   5

したがって、最初にfromに行(ヘッダーを除く)を追加したいのですが、 myUniqueFilefromに追加されたすべての新しい行で繰り返される方法で追加したいと思いますmyDuplicationFile。したがって、標準コンテンツを維持して新しい行を1つ追加してください。次のようにする必要があります。myDublicationFilemyUniqueFilemyDublicationFilemyUniqueFile

myDublicatedFile1.txt:

chromosoom  start    end       phylop   GPS
chr3    15540407    15540407    -1.391  -1
chr3    30648039    30648039    2.214   3
chr3    31663820    31663820    0.713   3
chr3    33093371    33093371    3.753   4
chr3    37050398    37050398    1.650   2
chr3    38053456    38053456    1.1     1
chr3    39597927    39597927    8.721   5
chr1    28745756    28745756    0.905   1    <- first line from `myUniquefile`


myDublicatedFile2.txt:

chromosoom  start    end       phylop   GPS
chr3    15540407    15540407    -1.391  -1
chr3    30648039    30648039    2.214   3
chr3    31663820    31663820    0.713   3
chr3    33093371    33093371    3.753   4
chr3    37050398    37050398    1.650   2
chr3    38053456    38053456    1.1     1
chr3    39597927    39597927    8.721   5
chr1    31227215    31227215    10.263  5    <- second line from `myUniquefile`

したがって、新しい行が追加されるたびに新しいファイルが生成される式ですmyDublicatedFile3,4,5

新しく追加されたコンテンツがある場合は、myDublicatedFilesこのファイルの特定の列を高い順に並べ替えたいです(例:フィロップ列)これを行うと、 for f in myDublicatedFile* ; do sort -g -r -k 3 $f >> $f.method1.txt次のようになります。

myDuplicatedFile1.method1.txt:

chr3    39597927    39597927    8.721   5
chr1    28745756    28745756    7.905   5 <- count 2
chr3    33093371    33093371    3.753   4
chr3    30648039    30648039    2.214   3
chr3    37050398    37050398    1.650   2
chr3    38053456    38053456    1.1     1
chr3    31663820    31663820    0.713   3
chr3    15540407    15540407    -1.391  -1
chromosoom  start    end       phylop   GPS

したがって、これらのファイルをソートした後、ソート後に追加された行の場所を知りたいです。 「grep」で何かをして「count」を使うのが私にとっては論理的なようです。

したがって、myDublicatedFile1.method1.txt追加された行はmyUniquefileファイルの2番目の場所で終わるため、この数/順位は2です。

数/順位を計算した後phlop(方法1)列を並べ替えたいです。GPS(方法2)列を追加してから、追加された行のランクを再計算します。 myDuplicatedFile1.method1.method2.txt は次のようになります。

chr3    39597927    39597927    8.721   5
chr1    28745756    28745756    7.905   5 
chr3    33093371    33093371    3.753   4
chr3    30648039    30648039    2.214   3
chr3    31663820    31663820    0.713   3
chr3    37050398    37050398    1.650   2
chr3    38053456    38053456    1.1     1
chr3    15540407    15540407    -1.391  -1
chromosoom  start    end       phylop   GPS

カウント/ランクが別のファイルに書き込まれると、後で統計に使用できるので簡単です。したがって、最も重要なファイルはこの数です。最終的にはこのファイルを使用するからです。 :)

それは次のとおりです。

countsForMethod1.txt:

29
3
5
6
50
etc.

countsForMethod2.txt:

7
3
21
45
etc..

ベストアンサー1

splitGNUバージョンがあり、または同じシェルをcoreutils使用できると仮定すると(ここで使用されているプロセス置換機能について)、ヘッダー行とソートを処理するために以前に許可された回答を変更できます。bashkshzsh

tail -n +2 myUniqueFile | SHELL=$(command -v bash) split -l1 --filter='{ 
  head -n 1 myDuplicationFile &&
    sort -g -r -k4,4 <(tail -n +2 myDuplicationFile) -
  } > "$FILE"'

その後、単純な行を使用して出力ファイル内の項目の場所を見つけることができますawkmyUniqueFile

awk 'FNR==NR && NR>1 {a[$0]++; next} ($0 in a) {print FILENAME, FNR}' myUniqueFile xa?
xaa 3
xab 2
xac 4
xad 5
xae 5
xaf 8
xag 9

別の方法/並べ替え順序のためにすすぎ、繰り返します。

おすすめ記事