每次在bash脚本中基于不同的模式拆分两个文件

时间:2015-09-29 16:09:57

标签: bash shell awk

我有以下场景,我必须根据两种不同的模式分割两个文件..

PLS。考虑我有以下文本文件:

$cat file1
====S
abcd
efgh
ijkl
mnop
====G
qrst
uvwX
yzab

为此,我有一个像awk '/====/{x="S"++i;next}{print > x;}'这样的脚本 - 它正在分割两个文件,如S,S1。

有少数例外文件没有第一个模式==== S

看起来像是

====G
qrst
uvwX
yzab

如果我为这种文件运行上面的脚本,我得到文件名S,它将这些记录添加到第一个模式==== S.但是,这里我想要文件名S1。这意味着如果我在文件中只有==== G,我需要将这些值放在S1文件中。

我怎样才能做到这一点?请求您的时间并为此提供任何解决方案。

谢谢,

1 个答案:

答案 0 :(得分:0)

只需使用map来记住模式。

  cat t.log 
    ====S
    abcd
    efgh
    ijkl
    mnop
    ====G
    qrst
    uvwX
    yzab

    cat t1.log 
    ====G
    qrst
    uvwX
    yzab

    awk '/====/{cur=$0; if(!p[$cur]){p[$cur]="S"++i}; file=p[$cur];next}{print >file;}' t.log t1.log