免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3734 | 回复: 11
打印 上一主题 下一主题

awk怎么输出除$1外的$2...$n的所有元素 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-28 11:07 |只看该作者 |正序浏览
对于下面的代码,怎么采用awk去掉前面的行号?用cut可以解决,想知道用awk怎么处理
   1 #!/bin/bash
   2 # self-destruct.sh
   3
   4 kill $$  # Script kills its own process here.
   5          # Recall that "$$" is the script's PID.
   6
   7 echo "This line will not echo."
   8 # Instead, the shell sends a "Terminated" message to stdout.
   9
  10 exit 0
  11
  12 #  After this script terminates prematurely,
  13 #+ what exit status does it return?
  14 #
  15 # sh self-destruct.sh
  16 # echo $?
  17 # 143
  18 #
  19 # 143 = 128 + 15
  20 #             TERM signal

论坛徽章:
0
12 [报告]
发表于 2007-08-28 16:23 |只看该作者
原帖由 ivhb 于 2007-8-28 15:23 发表
awk下,是否可以
awk -F "^[ ]*[0-9]+[ ]+" '{print (NF == 2) ? $2 : $0}'  ur-file
写的晦涩一点,但是更加简洁就是
awk -F "^[ ]*[0-9]+[ ]+" '{print $(1+(NF==2))}'

不能匹配空白行,将后面的空格跟着的+改成*可以
awk -F "^[ ]*[0-9]+[ ]*" '{print (NF == 2) ? $2 : $0}'  ur-file

论坛徽章:
0
11 [报告]
发表于 2007-08-28 16:01 |只看该作者
原帖由 寂寞烈火 于 2007-8-28 15:03 发表
awk的sub
awk '{sub(/.*/,"",$1);sub(/^ /,"");print}'
如果文件行数成百上千行的话, 你的cut就不成啦

呵呵 学习ing~
sub(r,s,t)       
Substitutes s for first match of the regular expression r in the string t. Returns 1 if successful; 0 otherwise. If t is not supplied, defaults to $0.

论坛徽章:
0
10 [报告]
发表于 2007-08-28 15:23 |只看该作者
awk下,是否可以
awk -F "^[ ]*[0-9]+[ ]+" '{print (NF == 2) ? $2 : $0}'  ur-file
写的晦涩一点,但是更加简洁就是
awk -F "^[ ]*[0-9]+[ ]+" '{print $(1+(NF==2))}'

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2007-08-28 15:03 |只看该作者
awk的sub
awk '{sub(/.*/,"",$1);sub(/^ /,"");print}'
如果文件行数成百上千行的话, 你的cut就不成啦

论坛徽章:
0
8 [报告]
发表于 2007-08-28 14:51 |只看该作者
自己总结了下,按照上面的办法:
cut -c6- sample
awk '{ $1=""; print}' sample | sed 's/^ \+//' (不知道怎么用sub,只好用sed去掉前面的空格了)
sed 's/^ \+[0-9]\+ *//' sample (烈火大大的模式最后有个空格会有点问题,对于空白行不能去掉前面的行号)
awk ‘{ for(i=2; i<=NF; ++i) printf("%s ", $i); print "" }' sample

学习中,以后请高手们多多指导~~3x

[ 本帖最后由 hansfly 于 2007-8-28 16:16 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-08-28 12:59 |只看该作者
明白了,没看清~谢谢各位

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-08-28 12:26 |只看该作者
版主的方法简单, 或者
awk '{for(i=2;i<=NF;i++)}

论坛徽章:
0
5 [报告]
发表于 2007-08-28 12:03 |只看该作者
人家的是
“^ \+[0-9]\+ ”而不是你的
“^\+[0-9]\+”

论坛徽章:
0
4 [报告]
发表于 2007-08-28 11:51 |只看该作者

回复 #2 寂寞烈火 的帖子

这样好像不想,行号前面有空格的,不能匹配模式^\+[0-9]\+
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP