ich mehrere Strings in Schleife verketten müssen und das Ergebnis der Variablen zuweisen:Wie Strings mit printf in bash formatiert verketten
Formatierter String Beispiel:
result=$(printf '| %-15s| %-25s| %-15s| %-15s| %-15s\n' $size $name $visits $inbound $outbound);
Aus meiner Sicht sollte es so funktionieren:
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
Aber es macht :(nicht
UPD:
Vollcodeliste unten:
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
** Immer ** stellen Sie sicher, dass der Code, den Sie in einer Frage eingeben, das Problem reproduziert, das Sie haben; Dein ursprünglicher Beitrag nicht. Der Grund dafür, dass 'result' leer ist, besteht darin, dass Sie ihm innerhalb einer Subshell zuweisen; Diese Änderungen verschwinden nach dem Beenden der Subshell. Aufgrund unserer ursprünglichen Frage konnten wir das nicht wissen. – chepner
Auf eine andere Anmerkung - das ist erstaunlich schrecklichen Code. Sie sollten niemals die Ausgabe von "ls" auf diese Weise parsen; siehe http://mywiki.wooledge.org/ParsingLs für eine Erklärung warum - auch die 'Katze | Grep' dreimal für jede einzelne Zeile der Eingabe ist äußerst ineffizient. –