2016-03-23 42 views
0

我试图分开基于字符串“//”的文件记录。awk中双斜线记录分隔

我已经试过是:

awk -v RS="//" '{ print "******************************************\n\n"$0 }' myFile.gb 

凡“******”等,仅仅是一个跟踪以显示我的记录是分裂。

但是,该文件还包含/(本身),我的跟踪******也被打印在那里,这意味着awk正在将它们解释为我的记录分隔符。

我怎样才能AWK只将记录在// ????

UPDATE:我在Unix(附带OS X中的一个)运行

我找到了一个临时的解决办法,是:

sed s/"\/\/"/"*"/g | awk -v RS="*" ... 

但是,必须有一个更好的办法,尤其是大规模的我正在使用的文件。

+0

尝试'RS = “\/\ /”'或'RS =“[/] [ /]“'?祝你好运。 (最糟糕的情况是'RS ='[\ /] [\ /]'') – shellter

+0

我试过所有这些!但它似乎永远打印出一份记录。这不是说它没有找到这种模式吗? – libby

+1

这取决于你的awk的实现。在某些情况下,RS只能是单个字符,而当您分配多字符字符串时,它只会使用第一个字符。 –

回答

1

在Mac上,awk version 20070501不支持多字符RS。下面是使用这样一个awk与gawk的说明,和比较(在同一台机器上):

$ /usr/bin/awk --version 
awk version 20070501 

$ /usr/bin/awk -v RS="//" '{print NR ":" $0}' <<< x//y//z 
1:x 
2: 
3:y 
4: 
5:z 

$ gawk -v RS="//" '{print NR ":" $0}' <<< x//y//z 
1:x 
2:y 
3:z 

如果你不能找到一个合适的awk,然后选择一个更好的性格比*。例如,如果标签是可以接受的,如果你的shell支持$'...',那么你可以使用这个咒语的sed

sed $'s,//,\t,g'