我在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
//...
我怎样才能做到这一点?
由于
答案 0 :(得分:0)
我的解决方案是:
find
要检查的所有文件; grep
指定模式的每个文件-n
如果匹配,则获取匹配行; head
或tail
拆分,并在第二步中获取行号。更重要的是,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_1
和part_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
//...
$