Я хотел бы использовать uniq для подсчета количества вхождений каждой строки, исключая числовое значение в начале строки (пример: 0000:01:00.0)
Каждое событие происходит более одного раза. Могут быть ситуации, когда каждое событие происходит только один раз.
Пример ввода
[root@cpod-compute-1 ~]# for i in $(awk -F= '/PCI_SLOT_NAME/{print $2}' /sys/class/net/*/device/uevent); do lspci -Dm | grep $i; done
0000:01:00.0 "Ethernet controller" "Intel Corporation" "I350 Gigabit Network Connection" -r01 "Cisco Systems Inc" "Device 00d5"
0000:01:00.1 "Ethernet controller" "Intel Corporation" "I350 Gigabit Network Connection" -r01 "Cisco Systems Inc" "Device 00d5"
0000:0a:00.1 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
0000:0a:00.2 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
0000:0a:00.3 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
Ожидаемый результат
2 "Ethernet controller" "Intel Corporation" "I350 Gigabit Network Connection" -r01 "Cisco Systems Inc" "Device 00d5"
3 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
Пример нерабочего случая
[root@cpod-compute-1 ~]# for i in $(awk -F= '/PCI_SLOT_NAME/{print $2}' /sys/class/net/*/device/uevent); do lspci -Dm | grep $i | awk '{$1="";print $0}' | sort | uniq -c; done
1 "Ethernet controller" "Intel Corporation" "I350 Gigabit Network Connection" -r01 "Cisco Systems Inc" "Device 00d5"
1 "Ethernet controller" "Intel Corporation" "I350 Gigabit Network Connection" -r01 "Cisco Systems Inc" "Device 00d5"
1 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
1 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
1 "Ethernet controller" "Intel Corporation" "Ethernet Controller X710 for 10GbE SFP+" -r01 "Cisco Systems Inc" "Ethernet Converged NIC X710-DA"
Собранные выходные данные. В собранных выходных данных я не вижу неожиданных символов.
[root@cpod-compute-1 ~]# for i in $(awk -F= '/PCI_SLOT_NAME/{print $2}' /sys/class/net/*/device/uevent); do lspci -Dm | grep $i | awk '{$1="";print $0}' | od -c; done
0000000 " E t h e r n e t c o n t r
0000020 o l l e r " " I n t e l C o
0000040 r p o r a t i o n " " I 3 5 0
0000060 G i g a b i t N e t w o r k
0000100 C o n n e c t i o n " - r 0
0000120 1 " C i s c o S y s t e m s
0000140 I n c " " D e v i c e 0 0
0000160 d 5 " \n
0000164
0000000 " E t h e r n e t c o n t r
0000020 o l l e r " " I n t e l C o
0000040 r p o r a t i o n " " I 3 5 0
0000060 G i g a b i t N e t w o r k
0000100 C o n n e c t i o n " - r 0
0000120 1 " C i s c o S y s t e m s
0000140 I n c " " D e v i c e 0 0
0000160 d 5 " \n
0000164
[root@cpod-compute-1 ~]# for i in $(awk -F= '/PCI_SLOT_NAME/{print $2}' /sys/class/net/*/device/uevent); do lspci -Dm | grep $i | awk '{$1="";print $0}' | sed -n l; done
"Ethernet controller" "Intel Corporation" "I350 Gigabit Network Conn\
ection" -r01 "Cisco Systems Inc" "Device 00d5"$
"Ethernet controller" "Intel Corporation" "I350 Gigabit Network Conn\
ection" -r01 "Cisco Systems Inc" "Device 00d5"$
Я не могу понять, в чем разница в соседних строках, которые кажутся дубликатами.
Пожалуйста, дайте мне знать, если потребуются какие-либо дополнительные результаты.
Спасибо.
| sort | uniq -c
должен появиться послеdone
цикла for. В настоящее время вы выполняете толькоsort
иuniq
в одной строке. Но вы хотите сделать это на всех линиях. Следовательно, вы должны поместить его после циклаfor
- person kvantour   schedule 13.01.2020