用awk提取后添加数字

时间:2014-10-05 12:05:45

标签: bash awk

我只是想用bash脚本添加文件的大小。

# ls -lh | awk '{print $5}' | tr "M" " "

59 
292 
34 
55 
90 
78 
78 
53 
57 
105 
26 
8.6 
8.3 
38 
74 
937 
48 

到目前为止我做得很好,但是当我试图添加所有这些数字时

# for i in [`ls -lh | awk '{print $5}' | tr "M" " " `]; do sum=$(($sum+$i)); done

我收到以下错误。

  -bash: +[: syntax error: operand expected (error token is "[")

请有人帮助我。

谢谢。

5 个答案:

答案 0 :(得分:2)

  • 第一条规则:don't parse the output of ls。它意味着人类,而不是脚本。请改用文件通配符find
  • 您尝试使用[]来分隔列表 - 这既不允许也不必要。
  • 避免反引号,更喜欢$( ) - 引用更少麻烦。

以下是使用bashstat执行此操作的方式:

sum=0
for file in * ; do
  sum=$(( sum + $(stat -c%s "$file") ))
done
echo $sum

findawk

find . -maxdepth 1 -type f -printf '%s\n' | awk '{sum += $1} END {print sum}'

答案 1 :(得分:2)

这个有点令人费解:

total=$( { stat -c '%s' * | tr '\n' '+'; echo 0; } | bc )

答案 2 :(得分:1)

ls -l | awk '{print $5}' | tr "M" " "| awk '{sum+=$1} END {print sum}'

答案 3 :(得分:1)

请不要介意,实际上ls -lh它会自行计算总文件的大小。现在我想出来了。

# ls -lh
total 2.0G

答案 4 :(得分:1)

这也有效 - du将使用-S跳过子目录,使用-s进行汇总,并使用-h进行人类可读打印:

du -Ssh