您的位置:首页 > 运维架构 > Shell

shell实例浅谈之文件特定行打印的多种方法

2015-01-04 22:18 399 查看


一、问题

Sed和AWK在处理文件方面有很强的优势,还有head和tail等文件处理工具的使用,grep也可实现文本的搜索。上述命令都可以在后面直接加文件名,不需要在前面使用cat添加管道,cat会影响命令执行的效率,本文中cat -n /etc/services实在测试时可很方便的查看到具体的行号。


二、详解

1、查看文件的第20行到30行的内容

以系统的/etc/services为例,cat -n /etc/services可以查看文件的行号。

(1)方法一:head和tail

head -30 /etc/services | tail -11(通过cat -n /etc/services | head -30 | tail -11查看具体行号)。

(2)方法二:sed

sed -n '20,30p' /etc/services(通过cat -n /etc/services | sed -n '20,30p'查看具体行号)。

(3)方法三:awk

awk '{if(NR>19 && NR <31) printf $1"\n"}' /etc/services(通过cat -n /etc/services | awk '{if(NR>19 && NR <31) printf $0"\n"}'查看具体行号)。



2、查看文件的特定行,设置步长

以系统的/etc/services为例,cat -n /etc/services可以查看文件的行号。

每隔十行打印一行数据(比如打印第1行、第11行、第21行):先生成序列号然后查找特定行。

(1)方法一:

sed -n '1~10p'
/etc/services查找特定行(通过cat -n
/etc/services |sed
-n '1~10p' 查看文件的行号)。

(2)方法二:限定从1到51行内,sed方法

[cpp]
view plaincopy





#!/bin/bash
for n in `seq 1 10 51`
do
sed -n "${n}p" /etc/services
#cat -n /etc/services | sed -n "${n}p"
done

(3)方法三:限定从1到51行内,生成序列方式不同

[cpp]
view plaincopy





#!/bin/bash
for((i=1; i<52; i=i+10))
do
sed -n "${i}p" /etc/services
#cat -n /etc/services | sed -n "${i}p"
done

(4)方法四:限定从1到51行内,awk方法

awk '{if(NR%10==1 &&
NR >0 && NR < 51) printf $0"\n"}' /etc/services,

通过cat -n /etc/services | awk '{if(NR%10==1 && NR >0 && NR < 51) printf $0"\n"}'查看文件的行号。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: