LinuxSir.cn,穿越时空的Linuxsir!

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

awk的FS问题?

[复制链接]
发表于 2004-7-18 15:26:06 | 显示全部楼层 |阅读模式
sample:

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

数据域被"\\"分割. 用awk如何表示这样的FS? 用了几种不同的方法都分隔不出正确的域来.
发表于 2004-7-18 16:07:09 | 显示全部楼层
awk -F'\\\\\\\\' '{print $n}' file
awk 'BEGIN{FS="\\\\\\\\"}{print $n}'
需要用8个\ ;)
发表于 2004-7-18 16:23:29 | 显示全部楼层
我发现这样可以:

  1. awk -F"\\\" '{for (x=1;x<=NF;x++) { print $x}}' file

  2. kdfjie

  3. kdjie

  4. fjknvnb

  5. kclmckd

  6. kmcoa

  7. cmlkm

  8. cmlksd

  9. ./kdjiem


复制代码
发表于 2004-7-18 16:26:32 | 显示全部楼层
  1. $ awk -F"\" '{for (x=1;x<=NF;x++) { print $x}}' text

  2. kdfjie

  3. kdjie

  4. fjknvnb

  5. kclmckd

  6. kmcoa

  7. cmlkm

  8. cmlksd

  9. ./kdjiem

复制代码


这样也可以?
糊涂了……
发表于 2004-7-18 16:29:31 | 显示全部楼层
这样还可以?
斑竹能不能解释一下~
  1. $ awk -F"\\\\\" '{for (x=1;x<=NF;x++) { print $x}}' text

  2. kdfjie

  3. kdjie

  4. fjknvnb

  5. kclmckd

  6. kmcoa

  7. cmlkm

  8. cmlksd

  9. ./kdjiem


复制代码
  1. $ awk -F"\\\\\\\" '{for (x=1;x<=NF;x++) { print $x}}' text

  2. kdfjie

  3. kdjie

  4. fjknvnb

  5. kclmckd

  6. kmcoa

  7. cmlkm

  8. cmlksd

  9. ./kdjiem

复制代码


直到:
  1. $ awk -F"\\\\\\\\\" '{for (x=1;x<=NF;x++) { print $x}}' text
  2. \kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\

复制代码
发表于 2004-7-18 16:35:50 | 显示全部楼层
请比较一下,我觉得你的有问题 ;)
/home/lee#cat file
dd\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\
/home/lee#awk -F'\\\\\\\\' '{print $1}' file
dd\kdfjie

/home/lee#awk -F"\\" '{print $1}' file
dd
/home/lee#awk -F"\\\\\\" '{print $1}' file
dd

/home/lee#
/home/lee#awk --version
GNU Awk 3.1.1
发表于 2004-7-18 16:42:08 | 显示全部楼层
$ awk -F"\\" '{print $1}' text
dd
$ awk -F"\\\\" '{print $1}' text
dd
$ awk -F"\\\\\\" '{print $1}' text
dd
$ awk -F"\\\\\\\\" '{print $1}' text
dd
$ awk -F"\\\\\\\\" '{print $2}' text
kdfjie
$ awk -F"\\\\\\" '{print $2}' text
kdfjie
$ awk -F"\\\\" '{print $2}' text
kdfjie
$ awk -F"\\" '{print $2}' text
kdfjie

awk --version
GNU Awk 3.1.3
Copyright (C) 1989, 1991-2003 Free Software Foundation.
 楼主| 发表于 2004-7-18 23:39:47 | 显示全部楼层
们还能显示出来东西, 我是用几个都不出来.

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

没有任何输出!
awk --version
GNU Awk 3.1.3
Copyright (C) 1989, 1991-2003 Free Software Foundation.
发表于 2004-7-18 23:45:25 | 显示全部楼层
你那个命令是没有输出的,
把$1改成$2看看
 楼主| 发表于 2004-7-18 23:51:25 | 显示全部楼层
[PHP]
echo '\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\' | awk -F'\\\\\\\\' '{print $1}'
[/PHP]
双引号不行. 改用单引号就行了.
还有就是单引号时用'\\', '\\\\'都不能正确的划分域, 只有用'\\\\\\\\'才行.按理说'\\\\'应该是表示'\\'的.?!
[PHP]
echo '\kdfjie\\kdjie\\fjknvnb\\kclmckd\\kmcoa\\cmlkm\\cmlksd\\./kdjiem\\' | awk -F'\\\\\\\\' '{print $1,$2,$3,$4,$5,$6,$7,$8}'

\kdfjie kdjie fjknvnb kclmckd kmcoa cmlkm cmlksd ./kdjiem

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

kdfjie  kdjie  fjknvnb  kclmckd


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

kdfjie  kdjie  fjknvnb  kclmckd
[/PHP]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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