如何使用awk在更长的字符串中的括号中提取文本?

时间:2013-04-25 06:43:36

标签: regex shell unix awk pattern-matching

我有点像awk / regex的初学者,所以我为这个noobish问题道歉。当字段组合时,我似乎最难用awk。我有一个更长的awk脚本解析几个平面文件表,但我遇到了这个特定列的麻烦。

我的数据如下:

           EFGH1234
    (ABCD#)EFGH1234
  (LMNOPQ#)RSTU6789

我正在尝试将括号中的文本分隔为它自己的列,如下所示:

          EFGH1234
    ABCD  EFGH1234
  LMNOPQ  RSTU6789

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

2 个答案:

答案 0 :(得分:1)

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

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

或在awk中:

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

答案 1 :(得分:1)

我假设您正在尝试创建额外的“列”,以便您可以使用它们。使用split() function将您的字段拆分为数组。并且,如果您保留拆分创建的元素/键数量的计数,则可以将此计数用作测试。例如:

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

结果:

           EFGH1234
ABCD EFGH1234
LMNOPQ RSTU6789