条件内的Awk循环

时间:2018-12-14 14:33:55

标签: awk

我需要创建一个条件,以按十年分隔数据。第一列是年份值(返回到0年)。如何在awk查询中更改条件?

0 Jan 10 2:04:40 Tot D
0 Jul 05 11:33:06 Tot A
3 May 04 22:22:05 Tot A
3 Oct 29 1:32:40 Tot D
7 Feb 20 23:03:27 Tot A
7 Aug 17 5:58:18 Tot D
10 Dec 10 6:28:52 Tot A
11 Jun 04 15:36:12 Tot D
14 Apr 04 4:41:23 Tot D
14 Sep 27 7:18:39 Tot A
18 Jan 20 10:38:27 Tot D
18 Jul 16 18:04:17 Tot A
21 May 15 5:47:44 Tot A
21 Nov 08 9:27:47 Tot D
22 May 04 23:00:32 Tot A
25 Mar 03 6:19:48 Tot A
25 Aug 27 13:47:51 Tot D
28 Dec 20 15:07:37 Tot A
29 Jun 14 22:37:10 Tot D
32 Apr 14 11:56:36 Tot D
32 Oct 07 15:38:15 Tot A
36 Jan 31 19:07:10 Tot D
36 Jul 27 0:39:47 Tot A
39 May 26 13:13:25 Tot A
39 Nov 19 17:26:37 Tot D
40 May 15 6:26:43 Tot A

我需要显示以下数据:

awk '{if ($1 >= 0 && $1 < 10) print }' All_Lunar_Eclipse.txt 
0 Jan 10 2:04:40 Tot D
0 Jul 05 11:33:06 Tot A
3 May 04 22:22:05 Tot A
3 Oct 29 1:32:40 Tot D
7 Feb 20 23:03:27 Tot A
7 Aug 17 5:58:18 Tot D

但是我必须每10年手动进行一次。

awk '{if ($1 >= 10 && $1 < 20) print }' All_Lunar_Eclipse.txt

10 Dec 10 6:28:52 Tot A
11 Jun 04 15:36:12 Tot D
14 Apr 04 4:41:23 Tot D
14 Sep 27 7:18:39 Tot A
18 Jan 20 10:38:27 Tot D
18 Jul 16 18:04:17 Tot A

我已经尝试了以下类似的尝试,

awk 'BEGIN { for (i = 0; i <= 2019; +=10) print i }'

2 个答案:

答案 0 :(得分:1)

根据您的需要,但将第一行除以10并获取整数值作为信息

awk '
   # separator process
   { Decade = int( $1 / 10 ) }

   # apply sample (unsorted and just stored by decade)
   { Data[ Decade] = Data[Decade] "\n" $0 }
   END { for ( Dec in Data ) printf "--- Decade: %d ----\n%s\n", Dec, Data[ Dec] }
   ' YourFile

答案 1 :(得分:1)

$ awk '
int(p/10)!=int($1/10) {
    print "New decade begins:"
}
{ p=$1 }
1' file
0 Jan 10 2:04:40 Tot D
0 Jul 05 11:33:06 Tot A
3 May 04 22:22:05 Tot A
3 Oct 29 1:32:40 Tot D
7 Feb 20 23:03:27 Tot A
7 Aug 17 5:58:18 Tot D
New decade begins:
10 Dec 10 6:28:52 Tot A
11 Jun 04 15:36:12 Tot D
...

...根据您对十年的定义(if ($1 >= 10 && $1 < 20))。我本来以为1-10年是第一个十年,第二个是11-20年,等等。这样也会使一次求和变得困难。