引子
突然有个问题需要解决,去掉首行。咋整?
head展示最前面的行
tail展示最后的行
awk 'NR>1'可以
sed '1d'也可以
但是,就想用head或者tail,咋整?对这俩命令不太熟悉。希望看到最后,你将会彻底掌握head和tail:
head 命令详解
head 命令用于显示文件的开头部分。
基本语法
head [选项] [文件]
常用选项
-
-n或-:显示文件的前 N 行 -
-c:显示文件的前 N 个字节 -
-q:不显示文件名(静默模式) -
-v:总是显示文件名
tail 命令详解
tail 命令用于显示文件的末尾部分。
基本语法
tail [选项] [文件]
常用选项
-
-n或-:显示文件的最后 N 行 -
-c:显示文件的最后 N 个字节 -
-f或--follow:实时追踪文件变化(常用于日志监控) -
-F:同-f,但在文件被轮转或删除后重新尝试打开 -
-q:不显示文件名 -
-v:总是显示文件名
这些参数很常规啊~~都是我们之前常用的~~学了个寂寞!!!
高级用法:显示文件的特定范围
从第N行到文件末尾
bash
# 从第11行显示到文件末尾(跳过前10行)
tail -n +11 filename.txt
# 从第6行显示到文件末尾(跳过前5行)
tail -n +6 filename.txt
显示第N行到第M行
bash
# 显示第5行到第10行
head -n 10 filename.txt | tail -n +5
# 或者使用sed
sed -n '5,10p' filename.txt
果然,任何功法都得学到高级,才能解决更高级的问题。
答案就藏在了tail的-n选项指定的参数:+N就是从第N行展示到最后一行。
既然tail -n +N 代表从+N行到最后一行,tail -n N代表最后N行。那么,head -n N代表top N,head -n -N呢?
答案: 从倒数第N行到第一行。
head命令实验:
~]# head -n 3 test-line.txt
line1
line2
line3
~]# head -n +3 test-line.txt
line1
line2
line3
~]# head -n -3 test-line.txt
line1
line2
line3
line4
line5
line6
line7
tail命令实验:
~]# tail -n 3 test-line.txt
line8
line9
line10
~]# tail -n -3 test-line.txt
line8
line9
line10
~]# tail -n +3 test-line.txt
line3
line4
line5
line6
line7
line8
line9
line10
性能比较
对于大文件:
-
tail -n +2:性能最好,直接定位到第2行开始读取 -
sed '1d':性能较好,流式处理 -
awk 'NR>1':性能较好,流式处理