第十行
给定一个文本文件 file.txt
,请只打印这个文件中的第十行。
示例:
假设 file.txt
有如下内容:
1 | Line 1 |
你的脚本应当显示第十行:
1 | Line 10 |
说明:
- 如果文件少于十行,你应当输出什么?
- 至少有三种不同的解法,请尝试尽可能多的方法来解题。
代码
使用sed
1 | sed -n 10p file.txt |
关于sed介绍在上一题有提到过
使用awk
1 | awk "NR==10" file.txt |
awk简介
awk
其名称得自于它的创始人 Alfred Aho
、Peter Weinberger
和 Brian Kernighan
姓氏的首个字母。实际上 AWK
的确拥有自己的语言: AWK
程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
awk
是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux
系统日常处理工作中,发挥很重要的作用,掌握了 awk
将会使你的工作变的高大上。 awk
是三剑客的老大,利剑出鞘,必会不同凡响。
简单使用
模板:awk '{pattern + action}' {filenames}
尽管操作可能会很复杂,但语法总是这样,其中 pattern
表示 AWK
在数据中查找的内容,而 action
是在找到匹配内容时所执行的一系列命令。花括号({})
不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern
就是要表示的正则表达式,用斜杠括起来。
awk
语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk
抽取信息后,才能进行其他文本操作。完整的awk
脚本通常用来格式化文本文件中的信息。
通常,awk
是以文件的一行为处理单位的。awk
每接收文件的一行,然后执行相应的命令,来处理文本。
AWK
内置变量:
变量 | 说明 |
---|---|
$0 | 这个变量包含执行过程中当前行的文本内容。 |
$n | 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 |
ARGC | 命令行参数的数目。 |
ARGIND | 命令行中当前文件的位置(从0开始算)。 |
ARGV | 包含命令行参数的数组。 |
NR | 表示记录数,在执行过程中对应于当前的行号 |
FNR | 同NR :,但相对于当前文件。 |
FS | 字段分隔符(默认是任何空格)。 |
NF | 表示字段数,在执行过程中对应于当前的字段数。 print $NF答应一行中最后一个字段 |
例子:
1 | print & $0 |
使用tail
1 | tail -n+10 file.txt|head -1 |