我已經包含了一些行我需要抓住一個日誌文件:想知道如何在合併這兩個命令的bash一個高效的
Jul 2 06:42:00 myhostname error proc[12345]: 01310001:3: event code xxxx Slow transactions attack detected - account id: (20), number of dropped slow transactions: (3)
Jul 2 06:51:00 myhostname error proc[12345]: 01310001:3: event code xxxx Slow transactions attack detected - account id: (20), number of dropped slow transactions: (2)
帳戶ID(XX)給了我一個對象的名稱我可以通過mysql查詢收集。
下面的命令(這是肯定的,在所有不優化,但工作)給我每個帳戶ID匹配的行數:
grep "Slow transactions" logfile| awk '{print $18}' | awk -F '[^0-9]+' '{OFS=" ";for(i=1; i<=NF; i++) if ($i != "") print($i)}' | sort | uniq -c
14 20
輸出(14 20)表示帳戶ID,觀察到20 14次(日誌文件中14行)。
然後我也有一些放慢的交易:(2)部分。 這給出了記錄的丟棄事務的實際數量。換句話說,日誌條目可能意味着一個或多個丟棄的事務。
我有一個小的命令數下降了交易數量:
grep "Slow transactions" logfile | awk '{print $24}' | sed 's/(//g' | sed 's/)//g' | awk '{s+=$1} END {print s}'
73
這意味着73個交易只好作罷。
這兩個作品,但是當兩個合併的時候,我被卡住了。我真的不知道如何將它們結合起來;我很確定awk可以做到這一點(也許是我做過的一種更好的方法),但是如果來自社區的任何專家都可以給我一些指導,我將不勝感激。
更新 由於上述人員,所以我介紹了一個可選功能:)太容易讓我們的一些AWK專家
正如前面提到的,我可以帳戶ID轉換成一個名字發出一個MySQL查詢。所以,現在的想法是將ID =>名稱轉換包含到awk命令中。
MySQL查詢看起來是這樣的(XX是帳戶ID):
mysql -Bs -u root -p$(perl -MF5::GenUtils -e "print get_mysql_password.qq{\n}") -e "SELECT name FROM myTABLE where account_id= 'XX'"
我創辦下面與命令輸出到awk的,但面臨的語法錯誤交易的帖子...
How can I pass variables from awk to a shell command?
你是如何對它們進行排序的,我認爲OP只做過,所以可以使用uniq? – 123
感謝您的快速回復。我將這兩個命令確實放到了一個輸出中。但這並不是我正在尋找的東西(也許我的描述不夠清楚):我想要做的是每個賬戶ID(賬戶ID)都有X(「放緩交易:(X)」)的總和:(YY))。 – Xxmusashi
答覆已更新。 –