[英]Bash: Formatting multi-line function results alongside each other
我有三個函數可在我的服務器上摘要一個access.log
文件。
hitsbyip() {
cat $ACCESSLOG | awk '{ print $1 }' | uniq -c | sort -nk1 | uniq
}
hitsbyhour() {
cat $ACCESSLOG | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c
}
hitsbymin() {
hr=$1
grep "2015:${hr}" $ACCESSLOG | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c
}
單獨使用時,它們都可以正常工作。 所有這三個輸出2小數據列。
現在,我正在尋找創建另一個名為report
printf
,該printf
將簡單地使用printf
及其格式化功能來打印帶有標題的3列數據,它們分別是我的第三個函數的結果。 像這樣:
report() {
printf "%-30b %-30b %-30b\n" `hitsbyip` `hitsbyhour` `hitsbymin 10`
}
問題是格式不是我想要的; 它水平打印列,而不是並排打印。
任何幫助將不勝感激。
一旦使用paste
將三個命令的輸出合並到單個流中, 就可以逐行操作以格式化這些輸出。
while IFS=$'\t' read -r by_ip by_hour by_min; do
printf '%-30b %-30b %-30b\n' "$by_ip" "$by_hour" "$by_min"
done < <(paste <(hitsbyip) <(hitsbyhour) <(hitsbymin 10))
注意事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.