Может быть более простой путь. Но если компиляция Вашего собственного ядра является опцией, Вы могли создать драйвер на основе существующего петлевого драйвера, изменить имя (строка 193 в той версии) и загрузить модуль. У Вас был бы второй петлевой интерфейс с именем, которое Вы хотите.
Править: Чтобы быть точнее, я означаю добавлять другой петлевой драйвер, не заменяя существующий. После копирования drivers/net/loopback.c к drivers/net/loopback2.c, примените следующий патч (сделанный сверху 3,8):
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 335db78..cba692f 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -13,7 +13,7 @@ obj-$(CONFIG_MACVLAN) += macvlan.o
obj-$(CONFIG_MACVTAP) += macvtap.o
obj-$(CONFIG_MII) += mii.o
obj-$(CONFIG_MDIO) += mdio.o
-obj-$(CONFIG_NET) += Space.o loopback.o
+obj-$(CONFIG_NET) += Space.o loopback.o loopback2.o
obj-$(CONFIG_NETCONSOLE) += netconsole.o
obj-$(CONFIG_PHYLIB) += phy/
obj-$(CONFIG_RIONET) += rionet.o
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 9ef07d0..ed9d82d 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2718,6 +2718,7 @@ static inline bool netif_supports_nofcs(struct net_device *dev)
}
extern struct pernet_operations __net_initdata loopback_net_ops;
+extern struct pernet_operations __net_initdata loopback2_net_ops;
/* Logging, debugging and troubleshooting/diagnostic helpers. */
diff --git a/net/core/dev.c b/net/core/dev.c
index f64e439..7c1cffb 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6834,6 +6834,9 @@ static int __init net_dev_init(void)
if (register_pernet_device(&loopback_net_ops))
goto out;
+ if (register_pernet_device(&loopback2_net_ops))
+ goto out;
+
if (register_pernet_device(&default_device_ops))
goto out;
Я понимаю, что просто загрузка модуля не будет достаточна, поскольку это изменяет код в net/core/dev.c. У Вас также будет установка исправленным ядром.
Измените порядок данных с помощью sort
и подсчитайте совпадения с помощью uniq -c
sort < input.txt | uniq -c
Вы можете использовать команды sort
и uniq -c
для подсчета вхождений всех строк, например, так:
$ sort sample.txt | uniq -c
4 cat
5 dog
1 fly
2 spider
Если вам нужна только одна строка "dog", вы можете использовать grep
до или после.
after
$ sort sample.txt | uniq -c | grep dog
5 dog
before
$ grep dog sample.txt | uniq -c
5 dog
Команда uniq -c
подсчитает все уникальные строки, которые ей представлены, но сначала список должен быть отсортирован. Поэтому перед подсчетом мы используем команду sort
.
Команда grep
предназначена для выделения в выводе того, что представляет интерес. Вы можете рассматривать grep
как фильтр, который может действовать как включительно, так и исключительно, в зависимости от того, что вы хотите получить на выходе.
Команда sort
позволяет сортировать данные на основе правил. В данном случае мы позволяем ей вести себя в режиме по умолчанию, поэтому она сортирует данные на основе буквенно-цифрового набора правил сортировки.
Если вы ищете только одну строку:
grep -cxF dog
или
echo "dog: $(grep -cxF dog)"
Эффективное решение для полного списка:
> awk '{a[$0]++}; END {for (val in a) print val ": " a[val];}' file
spider: 2
cat: 4
fly: 1
dog: 5