【发布时间】:2017-05-24 08:04:49
【问题描述】:
我正在尝试执行以下操作:
ls -l 在文件夹上的结果:
-rw-rw-r-- 1 root root 100 May 23 09:45 filename1
-rw-rw-r-- 1 root root 200 May 23 09:45 filename2
-rw-rw-r-- 1 root root 500 May 23 09:46 filename3
现在我想通过 awk 来执行以下操作:
800 bytes, files:
filename1
filename2
filename3
到目前为止,我可以通过 awk 将字节数相加:
output=`ls -l /some/folder/ | awk 'START {total = 0}; {total += $5} END{print total}'`
这个简单的给出:800
现在我想开始构建输出字符串,所以我试图获取文件名列表(我认为是第 9 列),我正在尝试这样:
output=`ls -l /some/folder/ | awk 'START {total = 0; files=""}; {total += $5 files="\n" files $9} END{print total "files:" files}'`
echo $output 给出以下内容:
800 filename1 filename2 filename3
我希望它显示:
800
filename1
filename2
filename3
我不明白为什么这些行没有分成新行?
【问题讨论】:
-
尝试双引号
"$output" -
我建议使用:
find . -maxdepth 1 -type f -printf "%s %f\n" -
哦来吧....说真的,-1?...这个问题是一个好问题的定义 - 它表明我已经做出了努力,它是一个具体的问题,我有最小示例代码和输出......是的,我肯定因为不知道自己在做什么而像两块短板一样厚,但这就是提出问题的重点......它真的让我不想再使用 SO 当“批评者”如此严厉。我不在乎这些点......这只是'为什么'这里有这么多人准备-1并投票关闭一切......无论如何 - 非常感谢这里的实际贡献者:)
-
@PS。是的,这行得通!谢谢...虽然我完全不明白为什么。如果您想将其作为答案,我会很乐意将其标记出来。
-
@Cyrus 我正在使用嵌入式 bash (busybox) 的精简版本,它似乎不支持您建议的“printf”部分:(