linux中如果echo结果有多行,如何取某一行?

linux中如果echo结果有多行,如何取某一行?
09-02-17  艺术人文的气息 发布
1个回答
时间
投票
  • 0

    yghyuwu

    这个问题看你的需求,你是要筛选有特定规律的行还是永远只要第二行?
    筛选有特定规律的行比较简单,比如说你只想要procs为1的行,那么用以下命令:
    echo "" | awk '$1==1 {print}'
    管道符“|”前面是你的echo命令,产生的结果用管道送给awk,$1==1做判断第一个字段是否等于1,如果是,就用{print}命令输出该行到标准输出。
    举例,输出pid为1的进程详细信息:
    ps aux | awk '$2==1 {print}'
    当然,如果echo的输出不复杂,用grep也能做。

    如果你只想要且永远只要第二行,那么用如下命令:
    echo "" | awk 'NR==2 {print}'
    同上一个例子,管道符“|”前面是你的echo命令,产生的结果用管道送给awk,awk的内置变量NR表示记录号,默认记录的分隔符是换行符,这里也就是一行一个记录的意思,NR==2做判断当前处理的记录号是否等于2,也就是判断是否是第二行,如果是,就用{print}命令输出该行到标准输出。
    举例,输出ps aux结果的第二行:
    ps aux | awk 'NR==2 {print}'
    当然,一楼用sed做也可以,可惜他没详细解释清楚,我看了半天也没明白echo "1\n2"打印的是什么,估计是随便举例吧,这个表达式没任何意义.

    ps.
    awk默认的字段分隔符就是空格,如果你在别处还需要使用别的分隔符,比如说筛选/etc/passwd文件特定信息,里面的分隔符是冒号,可以在awk命令后加 -F参数指定分隔符,比如说筛选root账户所使用的shell,用awk命令做就是:
    awk -F: '/root/{print $7}' /etc/passwd

    参考资料:http://linux.die.net/man/1/awk

    09-02-17 | 添加评论 | 打赏

    评论读取中....

精华知识
更多  
意见反馈 帮助