2012-04-28 41 views
0

我有以下数据的文件: -AWK解析到一个月可变

2012/02/17 154.89 24.00  3.72 0.098  0.36 0.188  0.050  0.03 0.58 
2012/02/18 238.16 24.00  5.72 0.098  0.56 0.188  0.050  0.04 0.79 
2012/03/19 155.55 24.00  3.73 0.098  0.37 0.188  0.050  0.03 0.58 
2012/03/20 186.00 24.00  4.46 0.098  0.44 0.188  0.050  0.03 0.66 
2012/04/21 487.86 8.87   4.33 0.098  0.42 0.188  0.050  0.03 0.64 
2012/04/22 264.32 24.00  6.34 0.098  0.62 0.188  0.050  0.04 0.85 
2012/04/23 328.65 23.99  7.89 0.098  0.77 0.188  0.050  0.05 1.01 
2012/04/24 155.31 24.00  3.73 0.098  0.37 0.188  0.050  0.03 0.58 
2012/04/25 229.36 24.00  5.50 0.098  0.54 0.188  0.050  0.04 0.76 
2012/04/26 153.45 24.00  3.68 0.098  0.36 0.188  0.050  0.03 0.58 

我有以下AWK脚本,当日期字段改变它打印出“差异”。

awk '{print $1,l} NR!=1 && $1!=l {print "diff"} {l=$1}' MyFile 

将会产生以下的输出: -

2012/02/17 
2012/02/18 2012/02/17 
diff 
2012/03/19 2012/02/18 
diff 
2012/03/20 2012/03/19 
diff 
2012/04/21 2012/03/20 
diff 
2012/04/22 2012/04/21 
diff 
2012/04/23 2012/04/22 
diff 
2012/04/23 2012/04/23 
2012/04/23 2012/04/23 
2012/04/23 2012/04/23 
2012/04/23 2012/04/23 
2012/04/24 2012/04/23 
diff 
2012/04/25 2012/04/24 
diff 
2012/04/26 2012/04/25 
diff 
2012/04/26 
diff 

我将如何修改脚本来告诉它,只打印出“差异”时的日期改变的月份(中间数)和不是整个日期?

回答

2

根据分隔符“/”拆分第一个字段。在比较中使用该结果。

$ awk ' 
> {print $1, l; split($1, m, "/");} 
> NR!=1 && m[2]!=l {print "diff";} 
> {l=m[2];}' MyFile 
2012/02/17 
2012/02/18 02 
2012/03/19 02 
diff 
2012/03/20 03 
2012/04/21 03 
diff 
2012/04/22 04 
2012/04/23 04 
2012/04/24 04 
2012/04/25 04 
1

希望这应该工作:

awk -F'[ \t/]' ' 
{d=$1 "/" $2 "/" $3; print d, od; od = d} 
NR!=1 && $2!=l {print "diff"} 
{l=$2}' FILE