我尝试使用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命令可以做些什么来解决这个问题?
答案 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