我有一个包含以下数据的文件: -
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脚本,当日期字段更改时,它会打印出“diff”。
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
如何修改脚本告诉它,只在日期中的月份(中间数字)而不是整个日期打印出“diff”?
答案 0 :(得分: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 :(得分:1)
希望这应该有效:
awk -F'[ \t/]' '
{d=$1 "/" $2 "/" $3; print d, od; od = d}
NR!=1 && $2!=l {print "diff"}
{l=$2}' FILE