我有一個文件(queryids.txt
)與847個關鍵字列表進行搜索。我必須從大約12個巨大的csv文件(最大的有2,184,820,000行)grep關鍵字。最終我們會將它加載到某種數據庫中,但現在我們只希望某些關鍵字被grep化。快速grep在巨大的csv文件
我的命令是:
LC_ALL=C fgrep -f queryids.txt subject.csv
我想到寫一個bash腳本這樣的:
#!/bin/bash
for f in *.csv
do
(echo "Processing $f"
filename=$(basename "$f")
filename="${filename%.*}"
LC_ALL=C fgrep -f queryids.txt $f > $filename"_goi.csv") &
done
,我將使用運行它:nohup bash myscript.sh &
的queryids.txt外觀像這樣:
ENST00000401850
ENST00000249005
ENST00000381278
ENST00000483026
ENST00000465765
ENST00000269080
ENST00000586539
ENST00000588458
ENST00000586292
ENST00000591459
主題文件看起來是這樣的:
target_id,length,eff_length,est_counts,tpm,id
ENST00000619216.1,68,2.65769E1,0.5,0.300188,00065a62-5e18-4223-a884-12fca053a109
ENST00000473358.1,712,5.39477E2,8.26564,0.244474,00065a62-5e18-4223-a884-12fca053a109
ENST00000469289.1,535,3.62675E2,4.82917,0.212463,00065a62-5e18-4223-a884-12fca053a109
ENST00000607096.1,138,1.92013E1,0,0,00065a62-5e18-4223-a884-12fca053a109
ENST00000417324.1,1187,1.01447E3,0,0,00065a62-5e18-4223-a884-12fca053a109
我而言,這將花費很長的時間。有沒有更快的方法來做到這一點?
謝謝!
大部分時間取讀CSV文件。無論你如何構建循環,都必須完成,而且你不能更快地完成任務。 'queryids.txt'很小,所以重新閱讀每個文件都不會有什麼重大區別。 – Barmar
只是爲了完成這個問題 - 請編輯它以包含您發佈的2個輸入文件的預期輸出。 –
你有一個包含兩個_billion_行的CSV文件?_「最終我們會把它加載到某種類型的數據庫中,但現在呢」_讓我猜,你每年都會這樣說十年? :)退出餵養你的技術債務! –