我有兩個文件具有類似的結構(製表符分隔的和許多行,第3個減去第2列= 1)增加一列,看起來有點像這樣:具有部分匹配圖案從一個不同的文件
文件1:
1 170023 170024 A -
1 170024 170025 T -
1 170026 170027 A -
1 170028 170029 G -
1 170029 170030 C -
1 170031 170032 C -
文件2:
1 170023 170024 A
1 170024 170025 T
1 170025 170026 G
1 170026 170027 A
1 170027 170028 G
1 170028 170029 T
1 170029 170030 A
1 170030 170031 G
1 170031 170032 C
我想從文件加2列4(字母僅列),以文件1.這在一般情況下,很容易與pr
或paste
但問題是在兩個文件中列1-3不相同。換句話說,文件具有不同數量的行,並且文件2總是比文件1多(特別是,文件1中發現的列2和3中的所有數字也出現在文件2中,但是不是反之亦然)。我也知道如何在R中完成它,但是這些文件太大而無法在R中輕鬆處理,而且我需要爲十幾個文件完成任務。所以我想,bash或者任何命令行軟件都是解決這個問題的最有效的方法。
我確實想要做的就是添加文件2中第4列的字母,當且僅當文件2中的第1-3列完全匹配第1個文件中的第1-3列。由此,也沒有關係在4列和文件1.基於文件1的實施例的5發生什麼符號和上述文件2,所期望的輸出將是:
輸出:
1 170023 170024 A - A
1 170024 170025 T - T
1 170026 170027 A - A
1 170028 170029 G - T
1 170029 170030 C - A
1 170031 170032 C - C
我如果有人能幫助我,我會很高興。非常感謝您提前!
非常感謝!我仍然在運行分析(很多大文件),並將編輯此評論以報告它是如何實現的。 – AlexDeLarge
@AlexDeLarge:這會很有幫助! – Inian
由於我有製表符分隔的文件,並且新列也應該用製表符分隔,所以我使用了以下命令爲基礎的第三個解決方案:'awk'FNR == NR {a [$ 1「\ t」$ 2「\ t」 $ 3] = $ 4;下一個}(($ 1「\ t」$ 2「\ t」$ 3)in a){print $ 0「\ t」a [$ 1「\ t」$ 2「\ t」$ 3]}'file2 file1' 。再次謝謝你! – AlexDeLarge