有時你可能想知道某個目錄下文件的大小,此時自然會想到帶有-l選項的ls命令。但是,這個命令除了文件名和文件大小之外,還要顯示其他很多信息。因此,可以將這個ls命令的結果通過管道送給awk命令作進一步的處理。使用組合命令顯示/boot目錄中每一個文件的文件名和大小:
goddog@ubuntu:~$ ls -lF /boot | awk '{ print $9 " " $5}'
abi-4.10.0-19-generic 1433520
config-4.10.0-19-generic 206872
……
看上去有些凌亂啊。為了使awk命令的顯示結果更清晰,在awk命令中引入了以下兩個可以在print命令表達式中使用的特殊的字符序列:
\n: 產生一個回車操作
\t: 產生一個製表鍵
利用 \t 重新修改一下上面的例子,這次是文件大小在前,文件名隨後,文件大小和文件名由製表鍵隔開:
goddog@ubuntu:~$ ls -lF /boot | awk '{print $5 "\t" $9}'
1433520 abi-4.10.0-19-generic
206872 config-4.10.0-19-generic
……
上述的顯示結果是沒有順序的,如果你想了解文件磁盤空間的使用情況,最關心的就是大文件,因為只有大文件才對系統的衝擊比較大。假設你現在想知道最大的3個文件的大小並且顯示的結果是按文件由大到小的順序列出。命令如下:其中sort命令中的-r表示由大到小排序,-n表示按數字排序:
goddog@ubuntu:~$ ls -lF /boot | awk '{ print $5 "\t" $9}' | sort -rn | head -3
41306042 initrd.img-4.10.0-19-generic
7035296 vmlinuz-4.10.0-19-generic
2937260 System.map-4.10.0-19-generic
如果想知道/boot中所有文件大小的總和,可以在awk命令中加入帶有變量和加法的表達式,命令如下:其中, totalsize是自定義的一個存儲文件大小總和的變量。awk命令中的命令表達式 totalsize = totalsize + $5 也可以縮寫成 totalsize += $5
goddog@ubuntu:~$ ls -lF /boot | awk '{ totalsize = totalsize + $5; print totalsize }'
0
1433520
……
53475010
結果除了顯示最後一行的所有文件大小的總和之外,還顯示了太多不重要的信息,為此,將這個命令的結果通過管道送給tail -1命令:
goddog@ubuntu:~$ ls -lF /boot | awk '{ totalsize += $5; print totalsize }' | tail -1
53475010
還有一種更好的方法是在awk命令中使用END關鍵字,命令如下:
goddog@ubuntu:~$ ls -lF /boot | awk '{ totalsize += $5} END { print totalsize }'
53475010
今天就分享這麼多了,謝謝欣賞!^_~