[Shell刷题]LeetCode:195. 第十行

327 阅读1分钟

写在前面

题目

给定一个文本文件 file.txt,请只打印这个文件中的第十行。

示例:

假设 file.txt 有如下内容:

Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 你的脚本应当显示第十行:

Line 10 说明:

  1. 如果文件少于十行,你应当输出什么?
  2. 至少有三种不同的解法,请尝试尽可能多的方法来解题。

思路 tail head

head可以看文件的前10行,再倒排得到第一行就能得到第十行了。 但是如果文件少于10行,这样子得到的是最后一行的信息,而不是第十行,题目这点没有说清楚,但从测试的结果看,如果没有第十行就应该显示为空才对的。

所以基于这个前提以下这个解法是错的。

[root@wuxianfeng74 home]# head file.txt |tail -1
9
[root@wuxianfeng74 home]# cat file.txt 
1
2
3
4
5
6
7
8
9

那应该怎么做呢?应该用tail -n +10 结合head来做

测试1
[root@wuxianfeng74 home]# tail -n +10 file.txt |head -1
10
[root@wuxianfeng74 home]# cat file.txt 
1
2
3
4
5
6
7
8
9
10
11

测试2
[root@wuxianfeng74 home]# tail -n +10 file.txt |head -1
[root@wuxianfeng74 home]# cat file.txt 
1
2
3
4
5
6
7
8
9

思路2 awk或sed的方法

awk 'NR==10' file.txt
sed -n '10p' file.txt 

sed和awk是在linux 工作的话一定要去进阶学习的工具,shell利器