我有一个非常大的平面文件列表,我已经能够用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
有更有效的方法吗?
答案 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