我有点像awk / regex的初学者,所以我为这个noobish问题道歉。当字段组合时,我似乎最难用awk。我有一个更长的awk脚本解析几个平面文件表,但我遇到了这个特定列的麻烦。
我的数据如下:
EFGH1234
(ABCD#)EFGH1234
(LMNOPQ#)RSTU6789
我正在尝试将括号中的文本分隔为它自己的列,如下所示:
EFGH1234
ABCD EFGH1234
LMNOPQ RSTU6789
我已经尝试过搜索,到目前为止已经发现了比我在这里尝试的更复杂的表达方式。任何帮助将不胜感激。
答案 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