2012-04-28 38 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