Я не знаю, каков будет ваш ожидаемый результат, однако я преобразовал / расшифровал ваш числовой шаблон в значимый формат группы / дома / комнаты.любой дальнейший «запрос» может быть выполнен для этого содержимого.
см. ниже:
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
обратите внимание , что сгенерированный формат можно изменить в соответствии с вашим "фильтром" или "запросом"
ОБНОВЛЕНИЕ
Комментарий ОП:
Мне нужно знать номер группы (групп), которые имеют / имеют, например, 1 дом с одной комнатой.Вывод будет в вышеприведенном случае: 1, 5, 6
, как я уже сказал, основываясь на ваших критериях запроса, мы могли бы настроить вывод awk для следующего шага.теперь я изменяю awk выше:
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
формат g roupIdx houseIdx numberOfRooms
и между группами есть пустая строка.мы сохраняем текст выше в файл с именем decoded.txt
, чтобы ваш запрос мог быть выполнен по этому тексту:
kent$ awk 'BEGIN{RS="\n\n"}{if (NF==3 && $3==1)print $1}' decoded.txt
1
5
6
последняя строка awk выше означает,выведите номер группы, если номер комнаты ($ 3) = 1 и в группе есть только одна строка.