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

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

num变量只是为列出的项目数量提供的参数。
不使用awk delimiter命令的上述输出是
4.0k./url列表
4.0公里/测试网址.sh
4.0公里/diskhoger.sh
4.0k./backup/url列表
4.0K./备份.sh
但是,添加awk命令输出
4.0K URL列表
4.0K测试url.sh
4.0公里diskhoger.sh
4.0K背景列表
4.0K备份.sh
只要有显著的子目录,就会出现类似的输出。
/库/缓存-库缓存等。
为了清楚起见,我试图在不影响其他正斜杠的情况下删除文件名开头的“../”。我的首选输出是:
4.0K URL列表
4.0K测试url.sh
4.0公里diskhoger.sh
4.0K备份/URL列表
4.0K备份.sh
其中“备份/url列表”不受影响。
分隔符中的“.”是我不知道的特殊字符吗?如果没有,这里到底发生了什么?
我是新来的,所以任何关于这方面的信息都会很好。
谢谢!
为清晰起见而编辑。

最佳答案

-F"./"-被视为“任何字符后跟正斜杠”。它被视为regex模式,其中.在regex表达式中表示“任何字符”。要使用“点后跟斜线”./作为分隔符,请使用以下方法之一:
.在字符类内

awk -F"[.]/" '{print $1,$2,$3}'

.转义
awk -F'\\./' '{print $1,$2,$3}'

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

10-11 22:37