Отмена - я называю сторонний блок, который поддерживает операции отмены. Это требует, чтобы вызывающие стороны создали контекст отмены, назвали некоторые методы в блоке, adn тогда уничтожают контекст отмены. Контексты могут быть вложены. Кроме того, если контекст создан, но оставлен в нежелательном состоянии, которое требует перезапуска приложения.
Обычно для использования отмены я записал бы что-то вроде этого
void foo()
{
int id = lib.create_undo_context();
try
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
finally
{
lib.destroy_undo_context(id);
}
}
с PostSharp, я определяю названный атрибут [Отменяют], который создает контекст отмены, когда метод запускает и уничтожает его, когда метод выходит (даже если исключение выдается) - таким образом, код похож на это
[Undo]
void foo()
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
, Это немного более сложно для реализации этого, чем я показываю, потому что я имею, гарантируют, что все контексты отмены очищены даже в случаях, где там вкладываются контексты Отмены - но Вы получаете идею.
Try it with awk
:
awk '{ count[$2] += $1 } END { for(elem in count) print count[elem], elem }' 1.out 2.out
Это довольно специфическая проблема, поэтому маловероятно, что какой-либо инструмент будет делать это по умолчанию. Вы можете написать сценарий в достаточно небольшом цикле (без неприятностей с awk), реализованном на любом языке сценариев (даже на sh). Я не думаю, что есть другой выход.
This is not quite serious (but it works). I like Philipps solution.
cat 1.out 2.out |
{
while read line; do
for i in $(seq ${line% *}); do
echo ${line#* }
done
done
} | sort | uniq -c