Awk 无法使用uniq-c打印所有行的计数
我想使用uniq计算每行的出现次数,不包括行开头的数值(例如:0000:01:00.0) 每次发生都不止一次。在某些情况下,每次事件只发生一次 样本输入Awk 无法使用uniq-c打印所有行的计数,awk,uniq,Awk,Uniq,我想使用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" "Int
[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; 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"$
我无法理解相邻行之间的差异是什么,它们看起来是重复的
如果需要进一步的输出,请告诉我
谢谢。OP使用的代码是:
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
而它应该是:
for i in $(awk -F= '/PCI_SLOT_NAME/{print $2}' /sys/class/net/*/device/uevent); do
lspci -Dm | grep $i | awk '{$1="";print $0}'
done | sort | uniq -c;
这两种情况的区别在于,在第一种情况下,您对单个命令的输出进行排序:
lspci -Dm | grep $i | awk '{$1="";print $0}'
在第二种情况下,对full for循环的输出进行排序
更新版本如下:
awk -F= '(FNR==1){ OFS=FS=(f==0 ? "=" : " "); $0=$0 }
(f==0) && /PCI_SLOT_NAME/{a[$2];next}
($1 in a) {$1=""; $0=$0; $1=$1; print}
' /sys/class/net/*/device/uevent f=1 <(lspci -Dm) | sort | uniq -c
awk-F='(FNR==1){OFS=FS=(F==0?=“:”);$0=$0}
(f==0)和&/PCI_SLOT_NAME/{a[$2];next}
(a中的$1){$1=”“;$0=$0;$1=$1;print}
“/sys/class/net/*/device/uevent f=1请您在问题中更清楚地提到输入样本和预期输出(可以作为问题中的一个单独部分)。您提供了许多不同的输出,但没有提供一个输入样本。请您的问题显示几行简洁的、可测试的样本输入和给定输入的预期输出。抱歉,Morton,第一部分实际上是输入。我已重命名标题。我将使输入更加详细。您的| sort | uniq-c
应显示在for循环的完成后。目前,您仅在一行上执行排序
和uniq
。但是你想在所有的线路上都这样做。因此,您必须将其置于for
-循环之后