詳しく説明する前に、この質問の一部をすでに質問していることを指摘したいと思います。 ->ここで見つけることができます。。いくつかの良い回答を受けましたが、もっと多くのことをする必要があるので、今回は質問を繰り返して詳細を追加します。
そのため、次のような独自のコンテンツを含むファイルがあります(と呼びます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に行(ヘッダーを除く)を追加したいのですが、 myUniqueFile
fromに追加されたすべての新しい行で繰り返される方法で追加したいと思いますmyDuplicationFile
。したがって、標準コンテンツを維持して新しい行を1つ追加してください。次のようにする必要があります。myDublicationFile
myUniqueFile
myDublicationFile
myUniqueFile
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
split
GNUバージョンがあり、または同じシェルをcoreutils
使用できると仮定すると(ここで使用されているプロセス置換機能について)、ヘッダー行とソートを処理するために以前に許可された回答を変更できます。bash
ksh
zsh
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"'
その後、単純な行を使用して出力ファイル内の項目の場所を見つけることができますawk
。myUniqueFile
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
別の方法/並べ替え順序のためにすすぎ、繰り返します。