Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 文件列表中带有awk的文件大小总和_Bash_Awk - Fatal编程技术网

Bash 文件列表中带有awk的文件大小总和

Bash 文件列表中带有awk的文件大小总和,bash,awk,Bash,Awk,我有一个文件列表,并希望对其文件大小进行汇总。 因此,我创建了一个(全局)变量作为计数器,并尝试循环该列表,使用ls获取文件大小,然后使用 export COUNTER=1 for x in $(cat ./myfiles.lst); do ls -all $x | awk '{COUNTER+=$5}'; done 然而,我的柜台是空的 > echo $COUNTER > 1 有人对我的,我在这里缺少的东西有想法吗 干杯,谢谢, 托马斯 好的,我找到了一种将awk管道的结果管

我有一个文件列表,并希望对其文件大小进行汇总。 因此,我创建了一个(全局)变量作为计数器,并尝试循环该列表,使用ls获取文件大小,然后使用

export COUNTER=1
for x in $(cat ./myfiles.lst); do ls -all $x | awk '{COUNTER+=$5}'; done
然而,我的柜台是空的

> echo $COUNTER
> 1
有人对我的,我在这里缺少的东西有想法吗

干杯,谢谢, 托马斯


好的,我找到了一种将awk管道的结果管道化到变量中的方法 (这可能不优雅,但很有效;)


awk
会为每个文件调用,因此在
计数器中,您会得到最后一个文件的大小

更好的解决方案是:

ls -all <myfiles.lst | awk '{COUNTER+=$5} END {print COUNTER}'

ls-all最新版本的较短版本:

ls -l | awk '{sum += $5} END {print sum}'
现在,假设您想按特定类型的文件、年龄等进行筛选。。。只需将ls-l放入find中,就可以使用find的广泛过滤器参数进行过滤:

find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'

du
我在
ubuntu13.10
上的命令不接受
stdin
上的任何内容。如果没有给出FILES参数,它总是使用当前目录。啊,我没有想到du——但是我在您的方法ls-all之间得到了非常不同的结果。du-c$(cat./myfiles.lst)| awk'END{print$1}'
(假设文件名中没有空格:)或者更好:
du-c--files0 from=对于那些从谷歌来到这里的人来说,关于
du
的一点补充说明:添加
-h
以使输出可读,例如使用1KB而不是1000。而不是
ls-all$x | awk'{print$5}
use
stat-c%s%x
如果我试图教某人如何使用awk,这将是我开始学习的示例。
ls -ltS | awk -F " " {'print $5'} | awk '{s+=$1} END {print s}'
ls -l | awk '{sum += $5} END {print sum}'
find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'