Sed 打印指定行的两种方法求解

sh/bash/dash/ksh/zsh等Shell脚本
回复
chunhe
帖子: 45
注册时间: 2007-04-05 13:26

Sed 打印指定行的两种方法求解

#1

帖子 chunhe » 2011-03-20 1:27

脚本中需要指定行打印,但是 -n 和q;d效率区别太大了。想用方法二实现
方法1:
root@SiteAA # time sed -n 50p xmlsoapdata_20110316_202910.log


real 0m0.197s
user 0m0.113s
sys 0m0.084s
方法2
root@SiteAA # time sed '50q;d' xmlsoapdata_20110316_202910.log


real 0m0.008s
user 0m0.002s
sys 0m0.006s

但是实际上遇到如下问题,说不认识这个命令。 又没有人能解?

设置变量
root@SiteAA # gtclinenum=5

直接用 sed '50q;d' GTC.txt 打印没问题:

root@SiteAA # sed '50q;d' GTC.txt
Received sequence : 8705629

用变量调用的时候就有问题

root@SiteAA # sed "'"$gtclinenum"q;d'" GTC.txt
Unrecognized command: '5q;d'

变量回显出来还是不行

root@SiteAA # sed `echo "'"$gtclinenum"q;d'"` GTC.txt
Unrecognized command: '5q;d'


请大家多多帮助,多谢多谢
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: Sed 打印指定行的两种方法求解

#2

帖子 fnan » 2011-03-20 8:34

kose5@kose5-Aspire-4552:~$ cat test.txt
1 hola todos
2 encuentrame si puedes
3 me encontraste
4 adios
kose5@kose5-Aspire-4552:~$ gtclinenum=3
kose5@kose5-Aspire-4552:~$ gtcommd=$gtclinenum'q;d'
kose5@kose5-Aspire-4552:~$ sed $gtcommd test.txt
3 me encontraste
kose5@kose5-Aspire-4552:~$
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: Sed 打印指定行的两种方法求解

#3

帖子 sk1418 » 2011-03-21 18:35

1, 你的方法1肯定会慢,因为在打印第50行以后会处理所有的行,试试这个

代码: 全选

sed -n '50{p;q;}'
2如果是变量可以这样

代码: 全选

whateverVar=50
sed -n "$whateverVar{p;q;}" yourFile
---
regards,

Kent
回复