LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: yongjian

awk的FS问题?

[复制链接]
 楼主| 发表于 2004-7-18 23:55:09 | 显示全部楼层
呵, 用PHP源码的方法,我的'\\'和'\\\\'都显示不了了,自动给我escape了.有意思... 我的第一段说的是"还有就是单引号时用'\\', '\\\\'都不能正确的划分域, 只有用'\\\\\\\\'才行.按理说'\\\\'应该是表示'\\'的.?!"
*数据中的第一个\是数据不是划分符号!*
发表于 2004-7-19 00:07:56 | 显示全部楼层
注意:用echo $str和用cat file出来的结果是不一样的!
 楼主| 发表于 2004-7-19 16:14:01 | 显示全部楼层

  1. datafile:
  2. \kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\
复制代码


  1. str='\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\'
复制代码


  1. cat datafile | awk -F"\\\\\\\" '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  2. kdfjie  kdjie  fjknvnb  kclmckd
  3. cat datafile | awk -F"\" '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  4. kdfjie  kdjie  fjknvnb  kclmckd
  5. cat datafile | awk -F"\\\" '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  6. kdfjie  kdjie  fjknvnb  kclmckd
复制代码


  1. echo $str | awk -F"\\\\\\\" '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  2. kdfjie  kdjie  fjknvnb  kclmckd
  3. echo $str | awk -F"\\\" '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  4. kdfjie  kdjie  fjknvnb  kclmckd
  5. echo $str | awk -F"\" '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  6. kdfjie  kdjie  fjknvnb  kclmckd
复制代码


  1. echo '\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\' | awk -F'\\' '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  2. kdfjie  kdjie  fjknvnb  kclmckd

  3. echo '\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\' | awk -F'\\\\' '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  4. kdfjie  kdjie  fjknvnb  kclmckd

  5. echo '\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\' | awk -F'\\\\\\\\' '{print $1,$2,$3,$4,$5,$6,$7,$8}'
  6. \kdfjie kdjie fjknvnb kclmckd kmcoa cmlkm cmlksd ./kdjiem
复制代码

只有最后一个是所需的数据. echo $str和 echo datafile我这里试的结果都是一样的. 但echo 那个str本身时最后一个是对的.
发表于 2004-7-19 18:06:08 | 显示全部楼层
/home/lee#cat file
\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\
/home/lee#echo $str
\kdfjie\kdjie\fjknvnb\kclmckd\kmcoa\cmlkm\cmlksd\./kdjiem\
我这里是不一样的 ;)
 楼主| 发表于 2004-7-20 23:41:57 | 显示全部楼层
哦,是这样. str这样付值就行了.
str='\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\'
用单引号括起来. 但awk后的结果还是那样. 看来只有用8个\而且必须用单引号才能正确划分和显示. 虽然知道结果,但为什么要这样写呢?不明白...
发表于 2004-7-20 23:48:11 | 显示全部楼层
是不是因为‘ ‘ 仅解释为字元,
而“ ” 还有解释变量的含义呢?
发表于 2004-7-21 00:01:44 | 显示全部楼层
最初由 aaccdd 发表
是不是因为‘ ‘ 仅解释为字元,
而“ ” 还有解释变量的含义呢?

单引号和双引号的用法上夺区别,我认为,在于括引里的内容,如果括引里没有元字符/变量,则他们的作用是一样的.,个人离解
 楼主| 发表于 2004-7-21 00:03:24 | 显示全部楼层
是. 用''单引的话shell对其中的内容不进行转义. 如echo '\\',出来的就是\\. 可是用到awk中就不行了. -F'\\' 出来的结果就不是正确的. -F'\\\\'都不行. 我认为是awk的问题.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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