2017-07-28 45 views
-1

我分別具有兩個文本文件A和B,用16和14列。循環通過特定列在兩個獨立的文本文件

這些文件中的列之間用空格分隔。

對於文件中的第9欄的每個條目,我要檢查,如果該條目是在文件B的8列

如果是這樣,我想將此值添加到一個新文件(文件C)。不過,我想文件C保留相同的格式文件A.

換句話說,這個新的文件應該包含17列,以及。

我一直無法弄清楚如何處理這個問題,並不能包括我作爲一個結果的進展。任何幫助表示讚賞。

預先感謝您。

+0

你能後的兩個文件的樣本?他們有多大? – choroba

+0

soooooo,python matlab或bash? – jacoblaw

+0

請提供您嘗試過的代碼示例。 – Fabien

回答

1

你可以閱讀這兩個文件到列表,列表中的提取物B的第8列,然後遍歷文件中的,檢查其第九元素與列8 B.

名單

如果匹配有一個匹配,那麼我是一家人剛剛打印線A.

NOTE:的每一行的末尾附加了比賽,如果你不需要線的時候沒有匹配,那麼你可以刪除else部分。

代碼

alines = [line.rstrip('\n') for line in open('aa.txt')] 
blines = [line.rstrip('\n') for line in open('bb.txt')] 

column8b=[] 

for line in blines: 
    column8b.append(line.split(" ")[7]) 

with open('cc.txt', "w") as oFile: 
    for line in alines: 
     element = line.split(" ")[8] 
     if element in column8b: 
      oFile.write(line + " " + element + "\n") 
     ## Delete this if you do not want to write A into C 
     ## when there is no match between A[9] and B[8] 
     else: 
      oFile.write(line + "\n") 

樣本數據:

aa.txt文件

1 2 3 4 5 6 7 8 16 10 11 12 13 14 15 16 
1 2 3 4 5 6 7 8 26 10 11 12 13 14 15 16 
1 2 3 4 5 6 7 8 36 10 11 12 13 14 15 16 
1 2 3 4 5 6 7 8 46 10 11 12 13 14 15 16 

bb.txt

1 2 3 4 5 6 7 16 9 10 11 12 13 14 
1 2 3 4 5 6 7 36 9 10 11 12 13 14 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 

cc.txt

1 2 3 4 5 6 7 8 16 10 11 12 13 14 15 16 16 
1 2 3 4 5 6 7 8 26 10 11 12 13 14 15 16 
1 2 3 4 5 6 7 8 36 10 11 12 13 14 15 16 36 
1 2 3 4 5 6 7 8 46 10 11 12 13 14 15 16 
0

如果您在通過行的文件讀取線,那麼你可以拉出你想要的相關信息。

your_file_A = open("FILEPATH.EXTENSION") 
your_file_B = open("FILEPATH.EXTENSION") 
your_file_C = open("FILEPATH.EXTENSION", 'w') 
col8_of_B=[] 
for line in your_file_B: 
    col8_of_B.append(line[7]) #line[7] is position 8 
for line in your_file_A: 
    if line[8] in col8_of_B: 
     your_file_C.write(line) 
0

什麼awk(因爲你有bash標籤)?:

awk 'FNR==NR {b[$8]=$0;next} b[$9] {print $0,$9 }' b a > c