免费注册 查看新帖 |

Chinaunix

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

在线,跪求,有关awk与print的脚本问题!谢谢啦! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-21 15:47 |只看该作者 |倒序浏览
目前写的脚本:

#!/sbin/ksh
ps -ef |grep -v 'UID'|awk '{print $1"|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8}'

这个脚本的输出类似于如下所示:
root|1256|00|May|18|pts1|msagent
root|23|01|11:00:32|?|csh

这里有一个我不希望看到的输出格式“May|18”,这样输出的原因是ps的输出中在
May和18间有空格。因此我想用固定长度的方法来做awk的输出,但是不知道如何来写脚本,恳求各位DX帮助!

我希望的输出格式:
  root|  1256|00|   May 18|pts1|msagent
    usr|      23|00|11:00:32|      ?|csh
也就是每一个域是定长的,可以在脚本中写死。

谢谢啦!

论坛徽章:
0
2 [报告]
发表于 2007-05-21 16:35 |只看该作者
可以
printf("%10s%20s\n",$1,$2)

论坛徽章:
0
3 [报告]
发表于 2007-05-21 16:37 |只看该作者
printf("%10s|%10s...",$1,$2...)

论坛徽章:
0
4 [报告]
发表于 2007-05-21 17:14 |只看该作者
谢谢各位了,明天试一试!

论坛徽章:
0
5 [报告]
发表于 2007-05-28 14:49 |只看该作者
可能我没有清除表达我的意思。我是想要格式化“输入”也就是说按照固定长度的string作为一个参数,而不是说固定长度的一个string作为输出。
也就是说:
"  root     may  21"应该取值为:$1='    root',$2='   may 21'。而不是通常的$1='root',$2='may',$3='21'。

能有好的方法吗?

论坛徽章:
0
6 [报告]
发表于 2007-05-28 15:16 |只看该作者
可以用%20s来指定20个字符长度的固定宽度。
难道2楼的帖子,楼主没有运行试试看吗?

还有也不用下跪求助吧?

论坛徽章:
0
7 [报告]
发表于 2007-05-28 16:01 |只看该作者
2楼的方法试过了。%20s是指定输出的格式啊!例如$1='May 21'时,不指定时输出"May 21",指定了后输出"         May 21"。
但是我想要的是$1!='May',$2!='21',而是 $1='May 21',$2=下一列的值。

再说的明白一点吧!

如果ps出来的结果是这样的:
root   23421   00  May 21  pts1  perl INF02.pl

那么我们会得到:  $1=root   $2=23421   $3=00  $4=May $5=21  $6=pts1  $7=perl $8=INF02.pl(因为awk会以空格作为分隔符)
而实际上我要的是:$1=root   $2=23421   $3=00  $4=May 21  $5=pts1  $6=perl INF02.pl(只有以定长的格式才能不受空格的影响)

。。。。。不知道我到底说清楚了没有。。。。。郁闷ing

论坛徽章:
0
8 [报告]
发表于 2007-05-28 16:34 |只看该作者
try
  1. awk 'BEGIN {
  2.         _count = split("7875", _steps, "");
  3. }

  4. {
  5.         start = 1;
  6.         for (i = 1; i <= _count; i++){
  7.                
  8.                 printf("%s|", substr($0, start, _steps[i]+0));
  9.                 start += _steps[i];
  10.         }
  11. }
  12. ' urfile |awk -F'[|]' '{ print $3; }'
复制代码
随便写的,只是猜测是否这个意思

论坛徽章:
0
9 [报告]
发表于 2007-05-30 16:04 |只看该作者
awk就是awp加ak 法师,我会去试一试,应该是这个意思吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP