如何使用sed或awk

时间:2016-01-13 07:05:22

标签: regex awk sed

我有一个看起来像

的输入文件
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

这样每个文件都是用单行创建的。

请使用sed或awk建议更快的处理方式,因为我需要为更大的文件(如15GB到20GB)执行此操作,并将这些拆分文件提供给hadoop框架以供进一步处理。

1 个答案:

答案 0 :(得分:2)

你可以使用这个awk:

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