声明:
今天是第48道题。给定一个文本文件 file.txt
,写一个 bash 脚本输出第10行。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定一个文本文件 file.txt
,写一个 bash 脚本输出第10行。
假设
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. 至少有三种不同的解法,请尝试尽可能多的方法来解题。
解法1。使用awk命令,对file.txt文件,判断行数为第10行时打印出来,耗时8 ms, 在Tenth Line的Bash提交中击败了97.35% 的用户,代码如下。
- NR:表示行数。已经读出的记录数,就是行号,从1开始
- NF:当前记录中的字段个数,就是有多少列
- $0:表示当前记录,所以我们可以用if来判断行数为第10行时,将内容打印出来即可:
awk 'if(NR==10) print $0' file.txt
# 简洁版
awk 'NR==10' file.txt
解法2。使用sed命令,耗时12 ms, 在Tenth Line的Bash提交中击败了31.20% 的用户,代码如下。
- -n:不输出模式空间内容到屏幕,即不自动打印
- p:限定具体打印的行数
sed -n 10p file.txt
解法3。用head和tail来做,耗时12 ms, 在Tenth Line的Bash提交中击败了31.20% 的用户,代码如下。
- head -n 3 file.txt: 打印file文件的前3行
- head -n -3 file.txt: 打印file文件除了最后三行的所有内容
- tail -n 3 file.txt: 打印file文件的最后3行内容
- tail -n +3 file.txt: 从file文件第3行开始打印所有内容
- |:为管道命令
# 先取前10行,再取第10行即最后1行,利用了管道:|
head -n 10 file.txt | tail -n +10
# 先取第10行开始以后的行,再取第1行,利用了管道:|
tail -n +10 file.txt | head -n 1
结尾
解法1、解法2、解法3:http://www.cnblogs.com/grandyang/p/5376902.html