我尝试使用cut命令从"ls -l"命令输出中获取文件名及其大小的列表.
$ ls -l | cut -f 5,9 -d " "
Run Code Online (Sandbox Code Playgroud)
它给出了基于'SINGLE WHITE SPACE'作为分隔符的输出.当"ls -l"输出在某些行中包含连续的空格时,该命令的输出不适合这些行.只有一个空格作为列分隔符的行给出正确的输出.
当我运行以下命令时:
$ ls -l | awk '{ print $5"\t"$9 }'
Run Code Online (Sandbox Code Playgroud)
awk忽略多个空格并从"ls -l"输出中正确提取列.虽然,cut将每个空格视为分隔符,但是将值放在错误的列中.
它为所有行提供正确的输出.
为什么会这样?使用cut命令可以做些什么来解决这个问题?
awk在空格上分割字段.cut分割分隔字符上的字段.awk是解决这个问题的更好工具.
作为替代方案,您可以管道ls -l输入一个实用程序,该实用程序可以压缩多个空间字符(可能tr -s),也可以输入到一个实用程序中,该实用程序可以用一个空格字符替换多个空格字符(可能sed).然后切割将做你想要的.
| 归档时间: |
|
| 查看次数: |
8049 次 |
| 最近记录: |