2012-05-14 108 views
0

我是bash腳本編程的新手,並且想編寫一個bash腳本來執行以下操作。 我有兩個製表符分隔的文件如下所示:使用bash腳本來比較兩個文件並寫入新文件

# file1 # 
## position id 
. 
. 
. 


# file2 
## position type 
. 
. 
. 

文件2是文件1的相對於位置的列的子集。 我要生成文件3,使得對於file2中的每一行,它查找具有相同位置的線file1和寫出以下爲文件3

position id type 
. 
. 
. 

所以,我想基本上之間找到共同立場file1和file2(第一列)並將它們與它們的id和類型(各自文件中的第2列)一起寫出。 我知道如何做到這一點使用python,但我想學習如何使用bash腳本來做這樣的過程 - 我會很感激上述問題的任何示例代碼。

額外註釋:

在每個列中的值如下

  • 位置:CHR1:887799
  • ID:R2A
  • 類型:analphabeticstring

Th anks

+2

嘗試「連接」,「剪切」和「排序」工具。 – krlmlr

回答

4
join -a 1 <(sort file1) <(sort file2) 

應該讓你有

的加盟手冊頁有更多背景資料和樣品:

+0

謝謝,我不知道連接命令。這很好地解決了這個問題。 – msohail

+0

所以這個命令實際上並沒有完全正確地完成這項工作。它應該產生一個與typefile相同長度的文件,但是它產生了一個較小的文件。我認爲這可能是因爲兩個文件在位置字段上不完全相同(即一個是另一個的子集)。我最終使用了一個帶有散列的python腳本 - 當一個文件是另一個文件的子集時,有沒有一種簡單的方法可以使用join(或另一個linux命令)? – msohail

+0

@msohail該手冊頁在那裏:)我編輯,以顯示如何使文件1中的所有行包括在內。 – sehe

-1

首先,你需要做製表符分隔的文件,那麼它的那麼容易,因爲

join -j 1 first.txt second.txt 
+0

需要確保輸入文件在連接列上排序 –

相關問題