【问题标题】:Print specific number of pattern matches打印特定数量的模式匹配
【发布时间】:2013-07-26 01:53:38
【问题描述】:

我有一个大文件,格式如下:

test.txt
bandera1
abc
def
ghi
jkl
bandera2
bandera1
abc
def
ghi
jkl
bandera2
...

我想将文件拆分成几个文件,例如:

file1.txt

bandera1
abc
def
ghi
jkl
bandera2
...

file2.txt

bandera1
abc
def
ghi
jkl
bandera2
...

我尝试使用 awk 来查找模式:

awk'{/patter1/,/patter2/} {print}' $test.txt >> file$a

但我不能让它在特定数量的比赛后停止。 不幸的是,我也尝试sed 找到相同结果的模式。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • file2.txt 必须从 file1.txt 结束的地方开始

标签: awk pattern-matching


【解决方案1】:

试试:

awk 'BEGIN { n = 1 } { print $0 > "bandera" n } /bandera2/ { n++ }' infile

对于输入文件:

bandera1
abc
def
ghi
jkl
bandera2
bandera1
abc
def
ghi
jkl
bandera2
bander1
...
bandera2

它产生:

==> bandera1 <==
bandera1
abc
def
ghi
jkl
bandera2

==> bandera2 <==
bandera1
abc
def
ghi
jkl
bandera2

==> bandera3 <==
bander1
...
bandera2

已更新参见 cmets):

awk '
    BEGIN { n = m = 1 } 
    { print $0 > "bandera" n } 
    /bandera2/ { 
        if ( m == 500 ) { n++; m = 0 }
        m++ 
    }
' infile

【讨论】:

  • thnks 工作得很好,一个问题 n 的增加可以是有条件的,比如如果 n -eq 500 然后 n++,因为我需要在一个文件中放入几个匹配模式,我尝试插入 n++ 之类的东西this: { if [ $n -eq 500 ];then n++} 所以bandera1可以记录500个模式匹配
  • @user2619593:我已经更新了答案。我使用了一个附加变量,直到 500 标记何时递增输出文件名中使用的另一个变量。
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2017-07-19
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多