मैं पाश में कई तार जोड़ और चर के लिए परिणाम सौंपने होंगे श्रेणीबद्ध करने के लिए:कैसे बैश में printf के साथ स्वरूपित तार
प्रारूपण स्ट्रिंग उदाहरण:
result=$(printf '| %-15s| %-25s| %-15s| %-15s| %-15s\n' $size $name $visits $inbound $outbound);
मेरे विचार से
इसे इस तरह से काम करना चाहिए:
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
लेकिन यह नहीं है :(
युपीडी:
पूर्ण कोड नीचे लिस्टिंग:
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
** हमेशा ** यकीन है कि कोड एक प्रश्न में पोस्ट समस्या आप कर रहे हैं reproduces बनाते हैं; आपकी मूल पोस्ट नहीं थी। कारण 'result' रिक्त है कि आप एक subshell अंदर यह करने के लिए बताए कर रहे हैं; सबहेल निकलने के बाद वे परिवर्तन गायब हो जाते हैं। आपके मूल प्रश्न के आधार पर हमें यह जानने का कोई तरीका नहीं था। – chepner
एक और नोट पर - यह आश्चर्यजनक रूप से भयानक कोड है। आपको कभी भी इस तरह से 'एलएस' से उत्पादन का विश्लेषण नहीं करना चाहिए; http://mywiki.wooledge.org/ParsingLs को एक स्पष्टीकरण के लिए देखें - भी, 'बिल्ली | इनपुट की प्रत्येक पंक्ति के लिए grep' तीन बार अत्यधिक अक्षम है। –