假设我有一个文件如下:
101 abcd <time>
106 efgh <time>
107 ijkl <time>
110 pqrs <time>
105 trsf <time>
101 yrte <time>
109 tyti <time>
110 tyui <time>
我想对从 101 开始到 110 结束的大块行进行一些操作。当一个文件中只有一次 101 和 110 出现时,我能够解决它。
sed -ne 's/101/,/110/p' file1 > file2
使用这个命令,我可以取出我想要处理的行 block 。请帮我找到我可以在第一个文件中保存第一个 block ,在第二个文件中保存第二个匹配行等的逻辑。
我正在 AIX 中编写脚本。
你可以这样做:
awk '/^101/ && !i { c++; i=1 } i { print > "file" c } /^110/ { i=0 }' input
这只是在每次匹配 ^101
时增加一个计数器 (c
),但前提是还没有在正在打印的 block 中。如果合适,第二个子句打印到名称中包含计数器的输出文件,第三个子句关闭标志 (i
),该标志用于确定当前行是否在待处理的 block 中打印出来。
另一种选择是简单地做:
awk '/^101/,/^110/{ print > "output" c } /^110/{c++}' c=1 input
我是一名优秀的程序员,十分优秀!