Unix - Bash - 如何根据特定规则拆分文件

时间:2016-04-28 07:05:52

标签: bash unix

我在unix上有成千上万的文件,根据以下规则我需要分成两部分:

1)在文件

中找到字符串'JOB'的第一个出现位置

2)找到第1点中出现的第一行,但不以逗号','结尾

3)在第2点中找到的行之后拆分文件

下面是一个示例文件,这个文件应该在以字符串“DUMMY”结尾的行之后拆分。

//*%OPC SCAN                              
//*%OPC FETCH MEMBER=$BUDGET1,PHASE=SETUP 
// TESTJOB JOB USER=TESTUSER,MSGLEVEL=5,
//                           CLASS=H,PRIORITY=10,
//                           PARAM=DUMMY
//*
//STEP1 EXEC DB2OPROC
//...

我怎样才能做到这一点?

由于

3 个答案:

答案 0 :(得分:0)

我的解决方案是:

  1. find要检查的所有文件;
  2. grep指定模式的每个文件-n如果匹配,则获取匹配行;
  3. 将匹配文件按headtail拆分,并在第二步中获取行号。
  4. 更重要的是,grep可以处理reg表达式。例如grep -n "^.*JOB.*[^,]$" filename

答案 1 :(得分:0)

您可以使用awk / sed

在以下几个步骤中执行此操作
line=`awk '/JOB/,/[^,]$/ {x=NR} END {print x}' filename`
next=`expr $line + 1`
sed -ne "1,$line p" filename > part_1
sed -ne "$next,\$ p" filename > part_2

其中filename是您文件的名称。这将创建两个文件:part_1part_2

答案 2 :(得分:0)

您可以使用sed执行此任务:

$ cat data1 
//*%OPC SCAN                              
//*%OPC FETCH MEMBER=$BUDGET1,PHASE=SETUP 
// TESTJOB JOB USER=TESTUSER,MSGLEVEL=5,
//                           CLASS=H,PRIORITY=10,
//                           PARAM=DUMMY
//*
//STEP1 EXEC DB2OPROC
//...
$ sed -n '0,/JOB/ p;/JOB/,/[^,]$/ p' data1 | uniq > part1
$ sed '0,/JOB/ d;0,/[^,]$/ d' data1 > part2
$ cat part1 
//*%OPC SCAN                              
//*%OPC FETCH MEMBER=$BUDGET1,PHASE=SETUP 
// TESTJOB JOB USER=TESTUSER,MSGLEVEL=5,
//                           CLASS=H,PRIORITY=10,
//                           PARAM=DUMMY
force@force-virtual-machine:~$ cat part2
//*
//STEP1 EXEC DB2OPROC
//...
$