使用awk打印标签

时间:2015-11-14 18:22:59

标签: unix awk sh freebsd ls

在我的FreeBSD 10.1上,我写了一小段基本上调用ls的代码,并自动将结果分解为:

directory:
    2.4M .git
    528K src
    380K dist
    184K test
file:
    856K CONDUCT.md
    20K  README.md
........

您只需要列出目录和常规文件,而不必列出. ..,但您必须列出隐藏文件,并从中排序分别从大到小。

挑战在于将作为单行命令完成,而不使用 $(cmd)&&||>,{{ 1}},>><;以及12个管道(后引号也计算在内)。

目前我的进展是:

&

仅打印到最后一个目录项。但由于整个命令将在每条记录中输出一次,因此我无法找到仅打印 ls -Alh | sort -d -h -r | awk 'BEGIN {print "Directories:"} NR>1 {if(substr($1,1,1)~"d")print" "$5" "$9}' 一次的方法,然后打印出剩余的输出。

1 个答案:

答案 0 :(得分:0)

好吧,您可能必须将文件存储在一个数组中并在最后打印:

ls -Alh|sed 1d|
  sort -h -k5r|
  awk 'BEGIN {print "Directories:"}
       /^d/{print "\t"$5"\t"$9}
       /^-/{f[n++]=sprintf("\t"$5"\t"$9)}
       END{print "Files:";
         for(i=0;i<n;++i)print f[i]}'

您需要解决的另一个问题是:文件和目录可能在名称中包含空格,而简单的$9则不足以满足这种情况。