我有一個file1,有幾行(幾十),和一個更長的file2(〜500,000行)。每個文件中的行不相同,儘管有一些相同的字段的子集。我想從file1中的每一行獲取字段3-5,並搜索file2以獲得相同的模式(只是這三個字段按相同的順序排列 - 在file2中,它們落在字段2-4中)。如果發現任何匹配,那麼我想從file1中刪除相應的行。awk/sed/grep刪除與其他文件中的字段匹配的行
例如,文件1:
2016-01-06T05:38:31 2016-01-06T05:23:33 2016006 120E A TM Current
2016-01-06T07:34:01 2016-01-06T07:01:51 2016006 090E B TM Current
2016-01-06T07:40:44 2016-01-06T07:40:41 2016006 080E A TM Alt
2016-01-06T07:53:50 2016-01-06T07:52:14 2016006 090E A TM Current
2016-01-06T08:14:45 2016-01-06T08:06:33 2016006 080E C TM Current
文件2:
2016-01-06T07:35:06.87 2016003 100E C NN Current 0
2016-01-06T07:35:09.97 2016003 100E B TM Current 6303
2016-01-06T07:36:23.12 2016004 030N C TM Current 0
2016-01-06T07:37:57.36 2016006 090E A TM Current 399
2016-01-06T07:40:29.61 2016006 010N C TM Current 0
...(以及50萬線)
因此,在這種情況下,我想刪除第四行文件1(到位)。
下找到行我想刪除:
grep "$(awk '{print $3,$4,$5}' file1)" file2
所以,一個解決辦法可能是管這sed的,但我不清楚如何從管道輸入sed的設置匹配模式。在線搜索表明awk可能會做所有這些(或者可能是sed或其他),所以想知道乾淨的解決方案是什麼樣的。
另外,速度有點重要,因爲其他進程可能會嘗試修改這些文件(我知道這可能會帶來更多複雜性......)。匹配通常會在file2的末尾找到,而不是開頭(如果有某種方法從下往上搜索file2)。
時脈聯合國辦事處的出色那樣的問題。繼續發帖並祝你好運。 – shellter