LinuxSir.cn,穿越时空的Linuxsir!

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

被欺骗的awk

[复制链接]
发表于 2003-7-11 18:00:45 | 显示全部楼层 |阅读模式
敲了一行列出目录和它的inode号的脚本

ls -al -i | awk'{if $2~/^d/ && $2!="." && $2 != ".." print $1 "   " $10  }'  

然后,建了一个名字中带空格的目录:
mkdir test\ a

结果,上一段程序执行结果变成了

xxxxxx crypt
xxxxxx test
xxxxxx test

最后一个实际上应该是 test a目录。

有什么办法能让awk避开这个问题吗?
发表于 2003-7-11 22:13:35 | 显示全部楼层
建立含有空格的目录,可以用
mkdir "a b"
or
mkdir " ab"
再试试看!
发表于 2003-7-11 23:05:11 | 显示全部楼层
我用awk不熟悉,看你的意思是不是这样?用sed来匹配中间有空格的模式,
$ls -li|sed -n '/[a-z][ ][a-z]/p'|awk '{print $1,$10,$11}'
发表于 2003-7-13 20:48:42 | 显示全部楼层
难,如果你的目录里最多只有一个空格
ls -ali | awk '{if ($2~/^d/ && $10 !="." && $10!="..") print $1 " " $10 " " $11

想用NF,可是没什么办法。
发表于 2003-7-15 04:03:20 | 显示全部楼层
没法用awk,就算有NF,也不能正确区分
  1. a b
  2. a  b
  3. a    b
复制代码
这样的不同目录

let's sed :-)
  1. $ls -al -i | gawk '{ if ($2~/^d/ && $9 != "." && $9 != "..") print $0}' | sed -e 's/ d[r|-][w|-].*[0-9]\:[0-5][0-9]//g'
  2. 150927 a b
  3.   75246 a    b
  4. 152055 hello
  5. 101173 kdev
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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