Cut和Awk命令:分隔符行为

时间:2013-01-14 18:57:32

标签: linux awk

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

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

它为我提供了基于' SINGLE WHITE SPACE'作为分隔符。当" ls -l"输出包含某些行中的连续空格,然后该命令的输出不适合这些行。  只有一个空格作为列分隔符的行给出正确的输出。

当我运行以下命令时:

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

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

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

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

3 个答案:

答案 0 :(得分:6)

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

作为替代方案,您可以将ls -l传递到压缩多个空间字符(可能是tr -s)的实用程序中,或者压缩到用单个空格字符替换多个空格字符的实用程序中(可能sed 1}})。 然后剪切将完成您想要的操作。

答案 1 :(得分:4)

Don't parse ls - 如果代码中包含空格,则代码不会打印完整的文件名。要获取文件大小和名称,请使用stat

stat -c "%s %n" *

答案 2 :(得分:3)

试试这个?:

ls -l | tr -s ' ' | cut -d ' ' -f 5, 9