为飞蛾添加第二列,但查找一个月结束的位置并调整到下个月

时间:2014-07-11 14:38:51

标签: bash awk

27
27
27
28
28
28
29
29
29
30
30
30
1
1
1
2
2
2
3
3
3

第1列是该月的某一天,我想为该月创建第二列。然而,我的一个月的日子超过两个月。从27到30的数字是09个月,而1到3的数字是10个月。所以awk脚本必须找到第一个月结束的地方,然后将月份相应地调整到下个月

我确实是wak的首发,并试图在awk中学习如何做到这一点。请原谅我,我甚至无法想出错误的方式

提前谢谢你 帕特里克

1 个答案:

答案 0 :(得分:0)

这会因使用getline而受到滥用,但这是一个解决方案

awk 'BEGIN{x=1}{getline y < FILENAME}y==1&&!t{x++;t=1}y==2&&t{t=0}{print y,x}' file

获取一行,在1上递增计数器,然后在2上取消设置一个令牌,这样它就不会在每个月的第一个1中不断递增。

实际上并不需要getline,一开始就采用不同的方式。 这里没有

awk 'BEGIN{x=1}$1==1&&!t{x++;t=1}$1==2&&t{t=0}{print $1,x}' file