Awk 无法使用uniq-c打印所有行的计数

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

我想使用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; 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
-循环之后