ho bisogno per concatenare più stringhe in loop e assegnare il risultato alla variabile:Come per concatenare le stringhe formattate con printf in bash
esempio stringa formattata:
result=$(printf '| %-15s| %-25s| %-15s| %-15s| %-15s\n' $size $name $visits $inbound $outbound);
Dal mio punto di vista dovrebbe funzionare in questo modo:
result=''
while read somevar
do
...
outbound=`cat "$www_path/$name/access.log"|grep \`date +"%d/%b/%Y"\`|awk '{ sum+=$11} END {print sum/1024/1024}'`
result=$(printf '%s| %-15s| %-25s| %-15s| %-15s| %-15s\n' $result $size $name $visits $inbound $outbound);
...
done
echo $result
Ma non :(
UPD:
codice completo elenco qui sotto:
www_path='/var/www';
result='';
cd /var/www/; ls -d */ | while read i ; do basename "$i" ; done
while read i;
do du -sh "$i"|
while read size name
do
visits=`cat "$www_path/$name/access.log"|grep \`date +"%d/%b/%Y"\`|grep -v "internal dummy connection"|awk -F ' ' '{print $1}' | sort | uniq | wc -l|tr '\n' '\t'|sed 's/$/\t/'`
inbound=`cat "$www_path/$name/access.log"|grep \`date +"%d/%b/%Y"\`|grep -v "internal dummy connection"|awk '{ sum+=$10} END {print sum/1024/1024}'|tr '\n' '\t'|sed 's/$/\t\t/'`
outbound=`cat "$www_path/$name/access.log"|grep \`date +"%d/%b/%Y"\`|grep -v "internal dummy connection"|awk '{ sum+=$11} END {print sum/1024/1024}'`;
result=$(printf '%s| %-15s| %-25s| %-15s| %-15s| %-15s\n' "$result" "$size" "$name" "$visits" "$inbound" "$outbound")
done
done
echo $result
** Sempre ** assicurarsi che il codice inserito in una domanda riproduca il problema riscontrato; il tuo post originale no. Il motivo 'result' è vuoto è che ti stai assegnando all'interno di una subshell; quelle modifiche scompaiono dopo la chiusura della subshell. Non c'era modo per noi di sapere questo in base alla tua domanda originale. – chepner
Su un'altra nota - questo è un codice incredibilmente terribile. Non si dovrebbe mai analizzare l'output da 'ls' in questo modo; vedi http://mywiki.wooledge.org/ParsingLs per una spiegazione del perché - anche, facendo 'cat | grep' tre volte per ogni singola riga di input è estremamente inefficiente. –