2013-12-16 114 views
0

我想将文件拆分成基于模式的块。下面的代码:使用awk将文件拆分成块

awk "/<MY PATTERN>/{++i;}{print }" %FILE% > Temp.txt 

让我等的输出:

1 
1 
1 
1 
1 
1 
2 
2 
2 
2 
3 
3 
4 
4 
4 
4 
5 
5 
5 

我想打印输出指示的所有行与“1” - 问题是,输出仅打印“1”而不是数据行。

我知道我只是在代码的打印部分丢失了一些东西,例如“打印输出中生成”1“的行”。

我正在使用windows批处理脚本。

+1

请添加示例输出。你的解释很混乱。 – janos

回答

1

无论是你的榜样输出或你的命令有问题.....

  • 为什么你需要的i?它根本不使用。将打印为print i
  • /patter/检查也没有意义。如果模式匹配,请执行++i,然后打印整行?
  • 问题标题是关于“将文件拆分成碎片”,我没有看到发生在您的代码中。

如果您的输出像您向我们展示的那样(使用您当前的cmd),则输出与您的输入完全相同。

如果print线为print i,你可以尝试:

awk '/pattern/{++i} i==1{print}' file >newfile 

再次,它是不是 “分裂”,它被提取。它会提取第一条(包含)和第二条(独占)匹配行之间的所有行。

+0

我对有些不准确的术语表示歉意 - 我对批处理脚本编码仍然很陌生。我知道我非常接近,但是您的解决方案完美无缺。我基本上通过源文件循环,提取它的部分和循环通过部分收集数据元素。我相信这看起来很简单,但你用这个保存了我的理智。非常感谢! –

0

变化printif (i==1) print $0