使用sed或awk从段落中提取单词

时间:2016-03-16 16:06:17

标签: awk sed

我想从以SET CURRENT开头的每个段落中提取信息,并将结果保存为csv。 例如,如果我有以下代码:

SET CURRENT = 'aaa' ;
CREATE SYN file1 FOR 1000.file1 ;
CREATE SYN file2 FOR 1000.file2 ;
CREATE SYN file3 FOR 1001.file3 ;
CREATE SYN file4 FOR 1001.file4 ;

SET CURRENT = 'bbb' ;
CREATE SYN file5 FOR 1002.file5 ;
CREATE SYN file6 FOR 1003.file6 ;

如何获得以下结果

file1;SYN;1000.file1;aaa 
file2;SYN;1000.file2;aaa
file3;SYN;1001.file3;aaa
file4;SYN;1001.file4;aaa
file5;SYN;1002.file5;bbb
file6;SYN;1003.file6;bbb

我设法从以CREATE SYN开头的行中获取信息,但是如何添加第一行的信息。

1 个答案:

答案 0 :(得分:1)

这个awk单行应该给你想要的东西:

awk -v q="'" -v OFS=";" '/^SET CUR/{split($0,a,q);v=a[2]}
                         /CREATE SY/{print $3,$2,$5,v}'    file

使用您的数据进行测试:

kent$  awk -v q="'" -v OFS=";" '/^SET CUR/{split($0,a,q);v=a[2]}/CREATE SY/{print $3,$2,$5,v}' f
file1;SYN;1000.file1;aaa
file2;SYN;1000.file2;aaa
file3;SYN;1001.file3;aaa
file4;SYN;1001.file4;aaa
file5;SYN;1002.file5;bbb
file6;SYN;1003.file6;bbb