我有幾個大型數據文件(〜100MB-1GB的文本)和一個數萬個時間戳的索引數據點的排序列表。時間戳文件看起來像:逐步掃描大文件
12345
15467
67256
182387
199364
...
,而數據文件的樣子:
Line of text
12345 0.234 0.123 2.321
More text
Some unimportant data
14509 0.987 0.543 3.600
More text
15467 0.678 0.345 4.431
在第二個文件中的數據是所有時間戳順序。我想通過使用第一個時間戳的第二個文件,在輸出文件中打印時間戳和第四個數據項。我一直在使用這個:
grep -wf time.stamps data.file | awk '{print $1 "\t" $4 }' >> output.file
這是對每個數據文件採取一天的完成順序。問題是這個命令在time.stamps中搜索每一行的整個數據文件,但我只需要搜索從最後一個數據點中選取。有什麼辦法可以加快這個過程嗎?
+1:花了我一點時間瞭解它是如何工作的,但是一旦我明白腳本的第一部分將所有時間戳加載到數組「a」中,第二部分檢查是否存在數據文件中第一個字段的數組,我可以看到這是一個非常優雅的解決方案,只需要足夠的內存來存儲所有時間戳。 – Simon
@Simon你是一位快速學習者,我的朋友。它確實如此。爲了進一步提高性能,可以在匹配後刪除數組元素。這會減小下一次掃描的大小,但如果該元素再次出現在文件中,它將不匹配。 –
不錯!現在需要8小時的工作需要12秒。 – user2548142