Text-Processing
如何從文件中提取和剪切數字並將它們求和
我有一個日誌文件。對於具有特定數字的每一行,我想總結這些行的最後一個數字。grep 和 cut 沒問題,但我不知道如何對數字求和。我嘗試了 StackExchange 的一些解決方案,但沒有讓它們在我的情況下起作用。
這是我到目前為止所擁有的:
grep "30201" logfile.txt | cut -f6 -d "|"
30201 是我正在尋找的行。
我想總結最後的數字 650、1389 和 945
日誌文件.txt
Jan 09 2016|09:15:17|30201|1|SL02|650 Jan 09 2016|09:15:18|43097|1|SL01|945 Jan 09 2016|09:15:19|28774|2|SB03|1389 Jan 09 2016|09:16:21|00788|1|SL02|650 Jan 09 2016|09:17:25|03361|3|SL01|945 Jan 09 2016|09:17:33|08385|1|SL02|650 Jan 09 2016|09:18:43|10234|1|SL01|945 Jan 09 2016|09:21:55|00788|1|SL02|650 Jan 09 2016|09:24:43|03361|3|SB03|1389 Jan 09 2016|09:26:01|30201|1|SB03|1389 Jan 09 2016|09:26:21|28774|2|SL02|650 Jan 09 2016|09:26:25|00788|1|SL02|650 Jan 09 2016|09:27:21|28774|2|SL02|650 Jan 09 2016|09:29:32|30201|1|SL01|945 Jan 09 2016|09:30:12|34032|1|SB03|1389 Jan 09 2016|09:30:15|08767|3|SL02|650
您可以幫助
paste
以適合添加的格式對數字進行序列化bc
:% grep "30201" logfile.txt | cut -f6 -d "|" 650 1389 945 % grep "30201" logfile.txt | cut -f6 -d "|" | paste -sd+ 650+1389+945 % grep "30201" logfile.txt | cut -f6 -d "|" | paste -sd+ | bc 2984
如果你有
grep
PCRE,你可以grep
單獨使用後向向後看:% grep -Po '\|30201\|.*\|\K\d+' logfile.txt | cut -f6 -d "|" | paste -sd+ | bc 2984
獨自
awk
一人:% awk -F'|' '$3 == 30201 {sum+=$NF}; END{print sum}' logfile.txt 2984
-F'|'
將欄位分隔符設置為|
$3 == 30201 {sum+=$NF}
如果第三個欄位是,則將最後一個欄位的值相加30201
END{print sum}
列印sum
在END