如何检查字段是否包含圆括号?

时间:2013-04-25 01:12:57

标签: shell unix awk

我有一个非常大的平面文件列表,我已经能够用awk的新手知识进行解析但是当我的字段没有空格分隔并且不是很均匀时,我会遇到一些学习曲线。我的样本数据如下:

AAA 10(05/12)(06:59) BBB
CCC 12       (12:24) DDD
EEE 10 04:39 (02:10) FFF
GGG 13 12/09  03:52  HHH

我想解析第3列中的字段,但前提是它们不是空白的,也不是括号括起来的。所以我应该输出4行,2个空格和2个填充数据:

*blank*
*blank*
04:39
12/09

到目前为止我尝试的是:

my loop:
dtime=substr($0,7,7)
if (match(dtime,"(\\(.*\\))")==1) {
    dtime=""
}
print dtime

有更有效的方法吗?

3 个答案:

答案 0 :(得分:2)

尝试gawk FIELDWIDTHS变量:

# AAA 10(05/12)(06:59) BBB
# .3.1.21.5...11..5..11.3.
$ gawk -vFIELDWIDTHS='3 1 2 1 5 1 1 5 1 1 3' '{if($4=="(" && $6==")")print ""; else print $5}' input 


04:39
12/09

答案 1 :(得分:1)

使用sed:

sed -e 's/[^ ]* *[^( ]*//'                          \
    -e 's/[(]*[0-9][0-9]:[0-9][0-9][)]* *...$//'    \
    -e 's/(.*)//' input

答案 2 :(得分:0)

这可能适合你:

$ awk 'NF==5{print $3;next}{print "*blank*"}' file
*blank*
*blank*
04:39
12/09