2016-01-13 80 views
2

我有一個輸入文件,它看起來像如何使用SED創建基於模式匹配多個文件或在awk

1S6290615260715DUTCH-ALDI   ROTTERDAM, EUDOKIAPLEIN 8       00002961999 
20000010019149GRANEN           0000000100000001590 0000111 
20000010019592ALASKA KOOLVISFILET        0000001270000024003 0000111 
20000010022614PAPRIKA 3 ST          0000000460000005934 0000111 
1S6290615260715DUTCH-ALDI   BERGEN NH, JAN OLDENBURGLAAN      00002962888 
20000000000404BLEEKMIDDEL          0000000900000003150 0000222 
20000000005197FRUIT            0000000430000005977 0000222 
20000000006013ROOIBOSTHEE          0000000140000001246 0000222 
1S6290615260715DUTCH-ALDI   DWINGELOO, HEUVELENWEG        00002963777 
20000000006469PITABROODJES          0000000610000004209 0000333 
20000000007372SCHENKSTROOP          0000000210000001869 0000333 
20000000007545HUISVUILZAKKEN         0000001080000012852 0000333 
1S6290615260715DUTCH-ALDI   BARNEVELD, CATHARIJNESTEEG       00002964666 
20000000005197FRUIT + GRANEN BISCUITS       0000000720000010008 0000444 
20000000005209IJSASSORTI MINIMIX        0000000190000003781 0000444 
20000000006013ROOIBOSTHEE          0000000210000001869 0000444 

我需要休息此文件到基於模式匹配多個文件。在這個文件中圖案化線開始1S6290615260715的基礎上,我需要創建多個文件,如

文件1:

1S6290615260715DUTCH-ALDI   ROTTERDAM, EUDOKIAPLEIN 8       00002961999 
20000010019149GRANEN           0000000100000001590 0000111 
20000010019592ALASKA KOOLVISFILET        0000001270000024003 0000111 
20000010022614PAPRIKA 3 ST          0000000460000005934 0000111 

文件2

1S6290615260715DUTCH-ALDI   BERGEN NH, JAN OLDENBURGLAAN      00002962888 
20000000000404BLEEKMIDDEL          0000000900000003150 0000222 
20000000005197FRUIT            0000000430000005977 0000222 
20000000006013ROOIBOSTHEE          0000000140000001246 0000222 

等。

使用AWK我試圖此命令

awk '/^1S/f++ {print $0 > "file"f}' input.txt 

與此各文件與單線創建。

請建議要麼用awk或者sed的更快的處理方式,因爲我需要像15GB 20GB的非常大的文件,做到這一點,提供用於進一步處理這些分割的文件,以Hadoop框架。

回答

2

您可以使用此AWK:

awk '/^1S/{if (f) close(f); f = "file" ++i} {print > f}' file 
+0

它的工作,謝謝。你能否解釋一下「如果」和「關閉」 – Abhinay

+0

我們應該關閉使用'> F'代碼所有打開的文件。 '如果(F)'只有當'F'變量被重新設置 – anubhava

+0

感謝關閉..我不知道的打開和關閉的awk ..... '的awk「/^1S/{接近(‘文件’的概念, ˚F); F ++} {打印$ 0> 「文件」 F 「.TXT」}」 file'。我試着在沒有「if」的情況下稍微改變你的命令。它的工作也是。 – Abhinay