linux - 字符串定界符正在影响其单个字符的某些实例

标签 linux bash shell awk

所以基本上,我试图用下面的代码打印出一个人类可读的文件和目录大小列表(没有列出当前目录)

du -arh | sort -nr | tail -n +2 | awk -F"./" '{print $1 $2 $3}' | head -n $NUM

NUM 变量只是为列出的项目数量提供的参数。

上面没有 awk 定界符命令的输出是

4.0K ./url-list
4.0K ./testurl.sh
4.0K ./diskhogger.sh
4.0K ./backup/url-list
4.0K ./backup.sh

但是,添加 awk 命令输出

4.0K url-list
4.0K testurl.sh
4.0K diskhogger.sh
4.0K backuurl-list
4.0K backup.sh

只要有值得注意的子目录,就会出现类似的输出。

./Library/Cache - LibrarCache, etc.

明确地说,我试图在不影响其他正斜杠的情况下删除文件名开头的“./”。我的首选输出是:

4.0K url-list
4.0K testurl.sh
4.0K diskhogger.sh
4.0K backup/url-list
4.0K backup.sh

“备份/url-列表”不受影响。

是'.'在我的定界符中有一个我不知道的特殊字符?如果不是,这里到底发生了什么?

我是 shell 的新手,所以任何关于这方面的信息都会很棒。

谢谢!

为清晰起见进行了编辑。

最佳答案

如果您使用 awk,您可以去掉一些其他命令

du -arh | sort -nr | awk -v len="$NUM" 'NR>1{gsub("\\.\\/",""); print} NR==len{exit}'

或者简单地使用

... | sed 's_\./__' | head ...

关于linux - 字符串定界符正在影响其单个字符的某些实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417324/

相关文章:

linux - 如何使用 bash 别名作为命令行参数

linux - 如何使用 shell 在 rc.local 中添加一行

linux - bash 脚本需要改进循环通过 12 小时前的目录,删除内部的符号链接(symbolic link)并删除目录

linux - 命令中意外标记 `fi' 附近存在语法错误

linux - Shell 脚本 - 两个 for 循环和更改文件扩展名

shell - 升级后 oh-my-zsh 错误 : ~/. oh-my-zsh/lib/misc.zsh:3: `then' 附近的解析错误

c - GCC 链接器无法找到库

linux - 如何获取shell脚本中使用的命令列表?

database - 如何使用 sed 使用引用文件在文件中进行数千次替换?

linux - Perl 在 bash 中用线程捕获 Ctrl-C