Chinaunix

标题: 如何删除第k列 [打印本页]

作者: Jenny.Palmy    时间: 2009-01-19 10:03
标题: 如何删除第k列
当一个文件的总列数不知道时(没行列数不等), 如何删除文件的第k列, 例如, 文件如下

16 18 a b c
20 17 b e
20 37 e f b t
我想删除第二列,得到结果
16 a b c
20 b e
20 e f b t
作者: ly5066113    时间: 2009-01-19 10:05
awk '$2="";1'
作者: todayhero    时间: 2009-01-19 10:08
[root@slave tools]# cat urfile | awk '{$2="";print $0}'
16  a b c
20  b e
20  e f b t
作者: 我是DBA    时间: 2009-01-19 10:12
还是tim的简单。。。
作者: Jenny.Palmy    时间: 2009-01-19 10:42
原帖由 ly5066113 于 2009-1-19 10:05 发表
awk '$2="";1'


这样在第一列和第二列之间就会有两个空格了, 例如

16  a b c
20  b e
20  e f b t
作者: HH106    时间: 2009-01-19 10:46
sed -r 's/\s+\w+//1'  urfile
作者: ywlscpl    时间: 2009-01-19 11:56
  1. 277# cat file
  2. 16 18 a b c
  3. 20 17 b e
  4. 20 37 e f b t
  5. 278# awk -v k=2 '{printf $1;for (i=2;i<k;i++) printf " "$i;for (i=k+1;i<=NF;i++) printf " "$i;print ""}' file
  6. 16 a b c
  7. 20 b e
  8. 20 e f b t
  9. 279# awk -v k=3 '{printf $1;for (i=2;i<k;i++) printf " "$i;for (i=k+1;i<=NF;i++) printf " "$i;print ""}' file
  10. 16 18 b c
  11. 20 17 e
  12. 20 37 f b t
  13. 280#
复制代码

作者: 我是DBA    时间: 2009-01-19 11:59
标题: 回复 #7 ywlscpl 的帖子
学习了,谢谢,
看来我awk得好好学学。
作者: ynchnluiti    时间: 2009-01-19 12:01
标题: 回复 #7 ywlscpl 的帖子
有点长
作者: ywlscpl    时间: 2009-01-19 12:08
精简了下
  1. awk -v k=2 '{printf $1;for (i=2;i<=NF;i++) if (i!=k) printf " "$i;print ""}' file
复制代码

作者: roong    时间: 2009-01-19 12:17
原帖由 ly5066113 于 2009-1-19 10:05 发表
awk '$2="";1'


后面那个“1” ;什么意思?
谢谢
作者: 我是DBA    时间: 2009-01-19 12:47
原帖由 roong 于 2009-1-19 12:17 发表


后面那个“1” ;什么意思?
谢谢

[test@erpdataserver ~]$ awk '$1~/20/;1' 2
16 18 a b c
20 17 b e
20 17 b e
20 37 e f b t
20 37 e f b t
[test@erpdataserver ~]$ awk '$1~/20/' 2
20 17 b e
20 37 e f b t
[test@erpdataserver ~]$ awk '$1~/20/;0' 2
20 17 b e
20 37 e f b t
[test@erpdataserver ~]$ awk '$1~/20/;1231' 2
16 18 a b c
20 17 b e
20 17 b e
20 37 e f b t
20 37 e f b t
作者: alextu    时间: 2009-01-19 13:03
DBA大哥,我看你TEST机器的hostname怎么那么吓人。。
作者: dingyinggui    时间: 2009-01-19 13:06
学习!
作者: ywlscpl    时间: 2009-01-19 13:08
如楼上举例,1等价于1{print}吧,再加个例子帮助理解,1或2其实就是表示“真”
  1. 310# cat file
  2. 16 18 a b c
  3. 20 17 b e
  4. 20 37 e f b t
  5. 311# awk '1;2{print}' file
  6. 16 18 a b c
  7. 16 18 a b c
  8. 20 17 b e
  9. 20 17 b e
  10. 20 37 e f b t
  11. 20 37 e f b t
  12. 312# awk '1;2' file
  13. 16 18 a b c
  14. 16 18 a b c
  15. 20 17 b e
  16. 20 17 b e
  17. 20 37 e f b t
  18. 20 37 e f b t
复制代码

作者: 我是DBA    时间: 2009-01-19 13:39
标题: 回复 #13 alextu 的帖子
dbserver 服务器。。。。
呵呵
作者: liaosnet    时间: 2009-01-19 13:41
标题: 回复 #16 我是DBA 的帖子
做ERP的啊.~~ORACLE库?
作者: 我是DBA    时间: 2009-01-19 13:44
标题: 回复 #17 liaosnet 的帖子
ERP的啊,不是oracle
informix
作者: 皇家救星    时间: 2009-01-20 00:29
$awk '$2="";1'
awk: syntax error near line 1
awk: bailing out near line 1

突然发现awk版本不同,语法区别还是蛮大的
作者: sunceenjoy    时间: 2009-01-20 09:21
来个cut,简单明了
cut -d" " -f1,3-40 1.txt
作者: biglazybug    时间: 2009-01-20 11:25
标题: 回复 #2 ly5066113 的帖子
这样空格还是留在那了呀
作者: ruifox    时间: 2009-01-20 15:09
原帖由 sunceenjoy 于 2009-1-20 09:21 发表
来个cut,简单明了
cut -d" " -f1,3-40 1.txt


万一大于40个域呢!
  1. cut -d" " -f1,3- file
复制代码

作者: ruifox    时间: 2009-01-20 15:11
原帖由 皇家救星 于 2009-1-20 00:29 发表
$awk '$2="";1'
awk: syntax error near line 1
awk: bailing out near line 1

突然发现awk版本不同,语法区别还是蛮大的


是语法区别吗?
  1. $ awk '$2="";1' file
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2