1

我尝试使用 cut 命令从“ls -l”命令输出中获取文件名列表及其大小。

$ ls -l | cut -f 5,9 -d " "

它给了我基于“单一空白”作为分隔符的输出。当“ls -l”输出在某些行中包含连续空格时,该命令的输出不适用于这些行。只有单个空格作为列分隔符的行会给出正确的输出。

当我运行以下命令时:

$ ls -l | awk '{ print $5"\t"$9 }'

awk 忽略多个空格并从“ls -l”输出中正确提取列。而 cut 将每个空格视为分隔符,将值放在错误的列中。

它为所有行提供正确的输出。

为什么会这样?我可以用 cut 命令做什么来解决这个问题?

4

3 回答 3

6

awk 在空格上分割字段。cut 在分隔符上分割字段。awk 是解决这个问题的更好工具。

作为替代方案,您可以通过管道ls -l连接到一个实用程序,该实用程序可以压缩多个空格字符(可能是tr -s),也可以是一个实用程序,用一个空格字符替换多个空格字符(可能是sed)。然后cut 会做你想做的事。

于 2013-01-14T19:08:14.680 回答
4

不要解析ls——如果包含空格,您的代码将不会打印完整的文件名。要获取文件大小和名称,请使用stat

stat -c "%s %n" *
于 2013-01-14T21:33:03.993 回答
3

试试这个?:

ls -l | tr -s ' ' | cut -d ' ' -f 5, 9 
于 2013-01-14T19:08:04.093 回答