我有这个:
echo -e "\n\n"
find /home/*/var/*/logs/ \
-name transfer.log \
-exec awk -v SUM=0 '$0 {SUM+=1} END {print "{} " SUM}' {} \; \
> >( sed '/\b0\b/d' \
| awk ' BEGIN {printf "\t\t\tTRANSFER LOG\t\t\t\t\t#OF HITS\n"}
{printf "%-72s %-s\n", $1, $2}
' \
| (read -r; printf "%s\n" "$REPLY"; sort -nr -k2)
)
echo -e "\n\n"
当在具有bash 4.1.2的机器上运行时,总是正确地返回,除了我将所有4个新行放在顶部。
在使用bash 3.00.15的计算机上运行时,它会将所有4个新行放在顶部,在输出中间返回提示,并且永远不会完成挂起。
我真的想为两个版本修复此问题,因为我们有很多机器同时运行。
答案 0 :(得分:0)
为什么让生活变得如此困难和难以理解?为什么不简化?
TXFRLOG=$(find /home..... transfer.log)
awk .... ${TXFRLOG}
答案 1 :(得分:0)
我找到的答案是使用一段时间阅读
echo -e "\n\n"; \
printf "\t\t\tTRANSFER LOG\t\t\t\t\t#OF HITS\n"; \
while read -r line; \
do echo "$line" |sed '/\b0\b/d' | awk '{printf "%-72s %-s\n", $1, $2}'; \
done < <(find /home/*/var/*/logs/ -name transfer.log -exec awk -v SUM=0 '$0 {SUM+=1} END{print "{} " SUM}' {} \;;) \
|sort -nr -k2; \
echo -e "\n\n"