Пересылка данных из сокета unix на принтер чашек

Уникальная сортировка сделает это.

$ sort -u input.txt
2019-02-17 not active
2019-02-18 active
2019-02-19 active
2019-02-19 not active
2019-02-20 active
2019-02-21 not active
2019-02-22 not active

Кстати, sort input.txt | uniqделает то же самое, а uniqимеет опцию -fдля пропуска полей при определении уникальности, опции -dи -D, если вы хотите напечатать не -уникальные строки а не только уникальные.


В качестве альтернативы, если вы хотите, чтобы только одна строка вывода на дату и чтобы любая «активная» запись имела приоритет над «неактивной» (или другими )записями:

perl -lane '
  $date=shift @F;
  $day{$date} = join(" ",@F) unless ($day{$date} eq "active");
  END {print $_. " ". $day{$_} for (sort keys %day)}' input.txt
2019-02-17 not active
2019-02-18 active
2019-02-19 active
2019-02-20 active
2019-02-21 not active
2019-02-22 not active

Это создает хэш(%day)с датами в качестве ключей и остальными полями в качестве значений.Текущее или последнее -увиденное значение для любого данного дня заменит более раннее -увиденное значение , если значение для любого данного дня уже не является "активным". В этом случае значение дня не будет заменено.

Когда все входные данные прочитаны, хэш %day сортируется и печатается.

Это более полезно и повторно -применимо, чем полагаться на порядок сортировки второго поля. например, если вы хотите, чтобы «zzzzz» имел приоритет, а не «действие». Также полезно, если второе поле может содержать что-то, что отсортировано перед «действием» (, например. номер)

0
20.01.2021, 18:33
1 ответ

Я столкнулся с почти точно такой же проблемой при работе с CUPS.

2021/02/01 19:19:22 socat[645] E write(6, 0x557e0b9735a0, 8192): Broken pipe

Мое решение состоит в том, чтобы каждый раз удваивать размер блока socat и тестировать. Моя ситуация заканчивается socat -b 65536....

socat -b 16384...
...
socat -b 65536...
0
18.03.2021, 22:35

Теги

Похожие вопросы