2013-04-25 74 views
1

我是awk/regex的初学者,所以我对这个无关紧要的问题表示歉意。当这些字段合并时,我似乎用awk最难。我有一个更长的awk脚本来解析几个平面文件表,但我遇到了这个特定列的一些麻烦。如何使用awk在更长的字符串中的括号之间提取文本?

我的数据是这样的:

  EFGH1234 
    (ABCD#)EFGH1234 
    (LMNOPQ#)RSTU6789 

我想,因为它是自己的专栏,像这样在括号中的文字分开:

  EFGH1234 
    ABCD EFGH1234 
    LMNOPQ RSTU6789 

我试过搜索,到目前为止,发现比我在这里要做的更复杂的表达。任何帮助将不胜感激。

回答

1

我假设你想创建额外的“列”,这样就可以与他们合作。使用split() function将您的字段拆分为一个数组。而且,如果您保留分割创建的元素/键的数量,则可以将此计数用作测试。例如:

awk '{ n = split($1, a, /[()#]/); print (n==1 ? $0 : a[2] FS a[4]) }' file 

结果:

  EFGH1234 
ABCD EFGH1234 
LMNOPQ RSTU6789 
+0

我有另一个类似的专栏,我会试试这个。谢谢! – fembot 2013-04-25 07:40:16

1

这是你所需要的吗?我想这里通过提取你的意思是删除pativehesis。

perl -pe 's/[\(|\)|\#]/ /g' your_file 

或AWK:

awk 'gsub("[(|#)]"," "){print}' your_file 
    ABCD EFGH1234 
    LMNOPQ RSTU6789 
    LMNOPQ RSTU6789 
+0

谢谢!这对我有用! – fembot 2013-04-25 07:39:43

+2

写得更好:awk'{gsub(/ [(#)] /,“”)}}'your_file'。另外,你的输出看起来不对。 – Steve 2013-04-25 07:43:22

相关问题