awk不显示某一域的问题

happystudy 2010-05-13 11:30:14
想实现只显示某一文件从第n列开始以后的所有域
比如:文件hist的内容为:
22 2010-05-09 02:01:37 : wget -SO test http://g.top100.cn/test.gz
39 2010-05-09 02:01:37 : w
40 2010-05-09 02:01:37 : df -h
42 2010-05-09 02:01:37 : exit
52 2010-05-09 02:01:37 : squid -z
57 2010-05-09 02:01:37 : cat /etc/fstab
58 2010-05-09 02:01:37 : history
59 2010-05-09 02:01:37 : df -TH
61 2010-05-09 02:01:37 : ps -ef |grep ssh
想实现的功能是输出从$5开始到末尾的所有内容。
期望的显示结果为:
wget -SO test http://g.top100.cn/test.gz
w
df -h
exit
squid -z
cat /etc/fstab
history
df -TH
ps -ef |grep ssh

由于对每行来说NF值都是不一样的,所以只能通过不显示$1,$2,$3,$4来实现了。
请教怎么实现这个功能。
我写的一个程序内容如下:

awk '{
for(i=5;i<=NF;i++)
{
print $i
};
print "\n"
}' hist
输出为:
wget
-SO
test
http://g.top100.cn/test.gz


w


df
-h


exit


squid
-z


cat
/etc/fstab



history


df
-TH


ps
-ef
|grep
ssh
文件中同行$5后面的显示是都显示了,但是都换行显示了,怎么把他们显示到一列里呢?


...全文
290 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
happystudy 2010-05-14
  • 打赏
  • 举报
回复
先结贴了,到完成的程序写出来再分享给大家。
happystudy 2010-05-14
  • 打赏
  • 举报
回复
printf("%s", $i)
用这个可以,谢谢大家!
happystudy 2010-05-14
  • 打赏
  • 举报
回复
以:为分隔符的话,02:01:37 这里也有冒号,所以$2并不是想要的结果,虽然这个文件可以用$4来获得想要的内容。
但是换个文件如果里边没有02:01:37 这样的时间戳信息的话,有要改程序了。
geniusqiao 2010-05-14
  • 打赏
  • 举报
回复
不一定要以空格作为分割。
已冒号更简单.
awk -F':' '{print $2}'
sabflying 2010-05-14
  • 打赏
  • 举报
回复
awk -F: '{print $2}'
brookmill 2010-05-13
  • 打赏
  • 举报
回复
把你那一行 print $i
换成这个试试 printf("%s ", $i)
brookmill 2010-05-13
  • 打赏
  • 举报
回复
不一定要awk吧,比如:
cut -d ":" -f 4 hist

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧