LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 973|回复: 6

[求助]awk的{}中我为什么不能用${2##/*/}这个语句呢?

[复制链接]
发表于 2003-4-15 10:38:55 | 显示全部楼层 |阅读模式
比如我du -s --max-depth=1 |sort -n后,通过awk来处理

|awk '{print $1 ${2##/*/}}'

怎么就不能用呢?

试过跳脱符号..没用耶...
发表于 2003-4-15 10:50:39 | 显示全部楼层
你那个du本身就有问题哟!你那个${2##/*/}?????
awk设置TAB为分隔符用 awk -F"\t"
发表于 2003-4-15 13:44:21 | 显示全部楼层

把#!/bin/sh改成#!/bin/bash

这是bash的扩展。
 楼主| 发表于 2003-4-16 00:32:23 | 显示全部楼层
那个${2##/*/}是用来取出单独的目录名的....
我现在的教本只能达到下面的效果...前提是参数用相对路径  ../

  1. #!/bin/sh
  2. du $1 --max-depth=1 | sort -n|awk '{printf "%7.2fM ----> %s\n",$1/1024,$2}'
复制代码


0.00M ----> ../sharin
   0.00M ----> ../test11
   0.01M ----> ../hacktest
   0.01M ----> ../jon163
   0.05M ----> ../truly
   0.18M ----> ../images
   0.80M ----> ../zend
   0.96M ----> ../coolbee
   1.66M ----> ../dh
   2.98M ----> ../sea
   3.87M ----> ../mu
   3.99M ----> ../believeu
   4.18M ----> ../manual
   4.19M ----> ../mwwdb
   8.27M ----> ../lool
   9.52M ----> ../viva
   9.73M ----> ../4image
  10.41M ----> ../cg
  10.51M ----> ../youxia
  11.03M ----> ../coconut
  11.75M ----> ../hyd
  14.02M ----> ../lksj
  15.41M ----> ../knighte
  16.04M ----> ../caxinfo
  17.55M ----> ../frecky
  22.62M ----> ../boredom
  29.09M ----> ../web
  30.79M ----> ../ayachina
  34.53M ----> ../ck
  37.71M ----> ../51js
  47.97M ----> ../chinairun
  55.12M ----> ../lpt
  58.53M ----> ../lucyyork
  58.72M ----> ../huix
  58.86M ----> ../handsomepig
  66.23M ----> ../GXD
  69.53M ----> ../hydxd
  70.09M ----> ../51pyc
  71.57M ----> ../sammi
  72.38M ----> ../xingzhe
  76.79M ----> ../tempshare
  81.10M ----> ../h2o
  87.08M ----> ../ourak
  93.03M ----> ../eacbbs
  96.20M ----> ../joe
103.30M ----> ../yuwen
108.94M ----> ../netpc
215.89M ----> ../green
1859.22M ----> ../ww
3662.45M ----> ..
发表于 2003-4-16 00:44:33 | 显示全部楼层
是这样的吗?!
javalee//home/javalee>for i in *
> do
> if [[ -d $i ]]
> then
> du -sh $i
> fi
> done
这样就列出了当前路径下所有目录占用空间!
如果要列出所有目录的话,先su到root身份,将变量*设置成$(ls -R)就可以啦~~,不知道我的理解对否?请指教;)
 楼主| 发表于 2003-4-21 17:14:02 | 显示全部楼层
呵呵..不好意思...都没有回帖...

  1. #!/bin/sh
  2. for a in $(ls $1)
  3. do
  4. if [ -d $a ]
  5. then
  6. du -s $a >>~/tmplist
  7. fi
  8. done
  9. cat ~/tmplist|sort -n|awk '{printf "%7.2fM ----> %s\n",$1/1024,$2}'
  10. rm -f ~/tmplist
复制代码


搞了一个下午..这个代码始终是在if [ -d $a ]处没有得到正确判断...

不加参数的话..本目录列表正常...一起研究一下吧......不过用文本交换始终没有用内嵌命令效率高..
发表于 2003-5-29 09:45:32 | 显示全部楼层
#!/bin/bash
for a in $(ls $1)
do
if [ -d $1/$a ]
then
du -s $1/$a >>~/tmplist
fi
done
cat ~/tmplist|sort -n|awk '{printf "%7.2fM ----> %s\n",$1/1024,$2}'
rm -f ~/tmplist
试试!应该没问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表