2015-11-02 28 views
1

所以我有兩個文件。 File AFile BFile A巨大(> 60 GB),並有16行,數字和字符串的混合,由「|」分隔,並有超過600,000,000行。字段3在這個文件中是ID,它是一個數字字段,長度不同(例如,某人的ID可以是1,而其他人的ID可以是100)加入unix當字段是數字在一個巨大的文件

File B只有一堆ID(〜1,000,000)和我想提取File A中具有「文件B」中ID的所有行。我已經開始做這個使用Linux下面的代碼

sort -k3,3 -t'|' FileA.txt > FileASorted.txt 
sort -k1,1 -t'|' FileB.txt > FileBSorted.txt 

join -1 3 -2 1 -t'|' FileASorted.txt FileBSorted.txt > merged.txt 

我的問題是,merged.txt是空的(當我知道一個事實,至少有10場比賽)。我用Google搜索這一點,它似乎問題是連接字段(ID)是數字。有些人提出用零填充該領域,但1)我不完全確定如何做到這一點,2)這似乎非常緩慢/時間效率低下。

有沒有其他想法呢?或幫助如何將填充0僅添加到相關字段。

回答

0

還是先排序文件B使用所述唯一標誌(-u)

sort -u file.b > sortedfile.b 

然後遍歷sortedfile.b並且對於每個grep的file.a.在zsh中我會做的grep從一個

foreach C (`cat sortedfile.b`) 
    grep $C file.a > /dev/null 
    if [ $? -eq 0 ]; then 
     echo $C >> res.txt 
    fi 
end 

輸出重定向到/ dev/null,並且測試是否有匹配($?-eq 0)和追加(>>)從該行水庫的結果。文本。

單個>將覆蓋該文件。我現在在zsh有點生疏,所以可能會出現拼寫錯誤。您可能使用的bash可能會有一些稍微不同的foreach語法。

相關問題