多次復製文件,寫入重複文件,對文件進行排序,排序後計算特定行的位置
在我詳細介紹之前,我想指出我已經問過這個問題的某個部分 ->你可以在這裡找到它。我收到了一些不錯的答案,但我需要做更多工作,所以這次我將重複我的問題並添加更多細節:
所以我有一個具有獨特內容的文件,看起來像這樣(讓我們稱之為
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
因此,首先我想從 to 添加行(標題除外)
myUniqueFile
,myDuplicationFile
但我希望它們以與從添加myDublicationFile
的每個新行重複的方式添加myUniqueFile
。所以myDublicationFile
保持他的標準內容+從 . 添加 1 個新行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
新添加的內容之後,我想為特定列從 high 到 low 對這些文件進行排序,(對於phylop列)我這樣做,for f in myDublicatedFile* ; do sort -g -r -k 3 $f >> $f.method1.txt
所以看起來像這樣:myDublicatedFile1.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
此計數/排名為 2,因為添加的行 frommyUniquefile
最終位於文件的第二位。在計算
phlop
**(method1)列的計數/排名後,我想對GPS
(method2)**列進行排序,然後再次計算添加行的排名。myDublicatedFile1.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..
假設您有
split
from GNU的版本coreutils
,以及類似bash
,的 shellksh
或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
沖洗並重複其他方法/排序順序。