1

我有点 awk/regex 的初学者,所以我为这个愚蠢的问题道歉。合并字段时,我似乎最难使用 awk。我有一个更长的 awk 脚本来解析几个平面文件表,但是我在处理这个特定的列时遇到了一些麻烦。

我的数据如下所示:

           EFGH1234
    (ABCD#)EFGH1234
  (LMNOPQ#)RSTU6789

我试图将括号中的文本分开,因为它是自己的列,如下所示:

          EFGH1234
    ABCD  EFGH1234
  LMNOPQ  RSTU6789

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

4

2 回答 2

1

这是你需要的吗?我猜这里的提取是指删除括号。

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

或在 awk 中:

awk 'gsub("[(|#)]"," "){print}' your_file
    ABCD EFGH1234
  LMNOPQ RSTU6789
  LMNOPQ  RSTU6789
于 2013-04-25T07:26:05.183 回答
1

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

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

结果:

           EFGH1234
ABCD EFGH1234
LMNOPQ RSTU6789
于 2013-04-25T07:36:05.687 回答