0

我有一个非常大的平面文件列表,我已经能够用 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

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

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

到目前为止,我尝试过的是:

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

有没有更有效的方法来做到这一点?

4

3 回答 3

2

尝试 gawkFIELDWIDTHS变量:

# 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
于 2013-04-25T01:37:53.163 回答
1

使用 sed:

sed -e 's/[^ ]* *[^( ]*//'                          \
    -e 's/[(]*[0-9][0-9]:[0-9][0-9][)]* *...$//'    \
    -e 's/(.*)//' input
于 2013-04-25T01:38:00.217 回答
0

这可能会为您解决问题:

$ awk 'NF==5{print $3;next}{print "*blank*"}' file
*blank*
*blank*
04:39
12/09
于 2013-04-25T09:35:05.347 回答