2014-02-14 76 views
0

我有這樣的:bash命令替換力前景

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

'回聲-e 「\ n \ n」'導致新行權? –

+0

你可能想嘗試簡化'找到...>>(SED ... | awk的... |(?))''要找到... | sed ... | awk ... | (...)'。 (我不知道如果是這樣的問題,但進程替換涉及在bash的部分一些trickinesses,所以它似乎也合情合理。) – ruakh

+0

是@JKB,但他們都在輸出 – menders65

回答

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" 
0

爲什麼讓生活困難和難以理解?爲什麼不簡化?

TXFRLOG=$(find /home..... transfer.log) 
awk .... ${TXFRLOG}