我是bash的新手,想要改進。我需要學習從文件或命令的輸出中讀取特定文本。例如,我想從/ proc/interrupts文件中計算每個核心計算機的總以太網中斷號。文件的內容是:讀取命令的輸出或從文件中讀取
CPU0 CPU1 CPU2 CPU3
0: 142 0 0 0 IO-APIC-edge timer
1: 1 0 1 0 IO-APIC-edge i8042
4: 694 18 635 19 IO-APIC-edge serial
7: 0 0 0 0 IO-APIC-edge parport0
9: 0 0 0 0 IO-APIC-fasteoi acpi
12: 1 1 0 2 IO-APIC-edge i8042
14: 0 0 0 0 IO-APIC-edge ide0
19: 0 0 0 0 IO-APIC-fasteoi uhci_hcd:usb3
23: 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2
46: 347470 119806 340499 108227 PCI-MSI-edge ahci
47: 33568 45958 46028 49191 PCI-MSI-edge eth0-rx-0
48: 0 0 0 0 PCI-MSI-edge eth0-tx-0
49: 1 0 1 0 PCI-MSI-edge eth0
50: 28217 42237 65203 39086 PCI-MSI-edge eth1-rx-0
51: 0 0 0 0 PCI-MSI-edge eth1-tx-0
52: 0 1 0 1 PCI-MSI-edge eth1
59: 114991 338765 77952 134850 PCI-MSI-edge eth4-rx-0
60: 429029 315813 710091 26714 PCI-MSI-edge eth4-tx-0
61: 5 2 1 5 PCI-MSI-edge eth4
62: 1647083 208840 1164288 933967 PCI-MSI-edge eth5-rx-0
63: 673787 1542662 195326 1329903 PCI-MSI-edge eth5-tx-0
64: 5 6 7 4 PCI-MSI-edge eth5
我需要用「eth」關鍵字讀取所有中斷的數目,然後找出每個CPU核心(CPU核心名稱是)的總和。例如對於CPU0:33568 + 0 + 1 + 28217 ... 這適合什麼?我必須使用awk或sed爲正則表達式,以及如何?
這是一個很好的答案,但是CPU0是靜態的。如果我不知道CPU內核的名稱和數量,例如,如果它以cPU1開始並且通過CPU9。我必須先閱讀核心名稱並分配給此腳本的變量,或者是否有方法閱讀此腳本 – barp 2012-07-20 12:29:50
@barp請嘗試此操作,最好使用不同數量的CPU列,並讓我知道這是否適用於您。我在這裏使用數組,只是fyi。另外請注意,我打印出腳本第三行中發現的內核數量,如果不需要,可以刪除它(認爲它可能對調試有幫助)。 – Levon 2012-07-20 12:41:00
從報告的結構來看,NR將足以檢測我猜測的CPU數量。 – nshy 2012-07-20 12:46:50