0 0 # <--- Group 1 -- 1 house (0) and 1 room (0)
0 0 # <--- Group 2 -- 2 houses (0;1) and 3,2 rooms (0,1,2;0,1)
0 1
0 2
1 0 # <--- house 2 in Group 2, with the first room (0)
1 1 # <--- house 2 in Group 2, with the second room (1)
0 0 # <--- Group 3
0 1 # <--- house 1 in Group 3, with the second room (1)
0 2
0 0 # <--- Group 4
1 0 # <--- house 2 in Group 4, with one room only (0)
2 0
3 0 # <--- house 4 in Group 4, with one room only (0)
0 0 # <--- Group 5
0 0 # <--- Group 6
在某些情况下,必须回答:
该示例中有一些组.如果存在一个组,如果它们之间用换行符隔开,那么在这种情况下,我们有6个组.我们必须确定以下内容
获取组的实际编号(普通编号)(例如,计数器从1开始)
>如果第一列= 0且第二列= 0并且下一行为空
因此,根据上述示例,所需的输出为
1
五
6
>如果第一列= 0,第二列可以变化并且下一行为空
因此,根据上述示例,所需的输出为
3
> …等.如何以一种我们可以在一开始就设置的方式将其概括化?
根据组中列的值,可能会有很多情况.
如果我们想像这样的话,我们可以想象得到:第一列表示街道上的房屋数量,第二列表示房屋的房间数量.现在我想在城市中找到所有可能的街道,这意味着
让我们拾起那些街道,其中有两间不同房间的房子,第一间有3个房间,第二间有2个房间.所以我们有get输出2,因为此要求满足了文件中的该组
0 0
0 1
0 2
1 0
1 1
重要事项:0 0表示一房一房
纠正:如果只有一间房子,那么它始终只有一间房间!与第1组,第5组和第6组的情况类似.请记住,第二列是房间数,0表示“ 1个房间”,1表示“ 2个房间”,…等等.这只是一个从0开始而不是1的计数器,抱歉,如果让它有些混乱…
解决方法:
我不知道您的预期输出是什么,但是我已经将您的数字模式转换/解码为有意义的组/房屋/房间格式.任何进一步的“查询”都可以在此内容上完成.
见下文:
kent$ cat file
0 0
0 0
0 1
0 2
1 0
1 1
0 0
0 1
0 2
0 0
1 0
2 0
3 0
0 0
0 0
AWK:
kent$ awk 'BEGIN{RS=""}
{ print "\ngroup "++g;
delete a;
for(i=1;i<=NF;i++) if(i%2) a[$i]++;
for(x in a) printf "House#: %s , Room(s): %s \n", x, a[x]; }' file
我们得到输出:
group 1
House#: 0 , Room(s): 1
group 2
House#: 0 , Room(s): 3
House#: 1 , Room(s): 2
group 3
House#: 0 , Room(s): 3
group 4
House#: 0 , Room(s): 1
House#: 1 , Room(s): 1
House#: 2 , Room(s): 1
House#: 3 , Room(s): 1
group 5
House#: 0 , Room(s): 1
group 6
House#: 0 , Room(s): 1
UPDATE
OP的评论:
I need to kNow, the number of the group(s) which have/has for example
1 house with one room. The output would be in the above case: 1, 5 ,6
正如我所说,根据您的查询条件,我们可以为下一步调整awk输出.现在,我将awk uppert更改为:
awk 'BEGIN{RS=""}
{print ""; gid=++g;
delete a;
for(i=1;i<=NF;i++) if(i%2) a[$i]++;
for(x in a) printf "%s %s %s\n", gid,x, a[x]; }' file
这将输出:
1 0 1
2 0 3
2 1 2
3 0 3
4 0 1
4 1 1
4 2 1
4 3 1
5 0 1
6 0 1
格式为groupIdx houseIdx numberOfRooms,并且组之间有空白行.我们将上面的文本保存到名为decoded.txt的文件中
因此您的查询可以在以下文本上完成:
kent$ awk 'BEGIN{RS="\n\n"}{if (NF==3 && $3==1)print $1}' decoded.txt
1
5
6
如果房间号($3)= 1并且组块中只有一行,则上面的最后awk行表示打印组号.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。