使用awk在括号中提取部分字符串

时间:2014-03-25 23:33:40

标签: regex bash awk

我知道在类似主题上有几个问题,但它们都不适用于我。具体来说,我有: the date is (Dec 2013).作为记录中的字段,我只想要Dec 2013部分并将其存储在变量中。我试过match(),但它不起作用。这是我的代码(字段是$ 2):

match($2,/\(([^)]+)\)/,a);
print a[0];

但它给了我一个错误awk: illegal statement at source line 8 source file script.awk。第8行是match()的行。任何人都可以帮我解决问题吗? 它必须是awk,因为它是大脚本的一部分。

2 个答案:

答案 0 :(得分:1)

grep怎么样?它诞生于提取:

kent$ echo "the date is (Dec 2013)"|grep -Po '\(\K[^)]*'
Dec 2013
好的,你需要awk:

kent$  awk 'BEGIN{s="the date is (Dec 2013)";if(split(s,a,"[()]")==3)print a[2]}'
Dec 2013
s上方的$2

print替换为变量以进行分配。我将整个事情放在BEGIN中,仅用于测试。

答案 1 :(得分:1)

您可以在AWK中使用sub。基本上这会将场地切割成你想要的。

所以你可以做到以下几点:

date = your_field
# this chops everything from front to first '('
sub("^.*\(", "", date) 

# this chops off everything from the last ')' to the end of the field
sub("\).*$", "", date)

Awk String Functions