leetcode 195. 第十行

给定一个文本文件 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. 至少有三种不同的解法,请尝试尽可能多的方法来解题。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/tenth-line
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

cat file.txt | awk '{if(NR==10){print $0}}'

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。

awk    'BEGIN{ 这里面放的是执行前的语句 }
    {这里面放的是处理每一行时要执行的语句}
    END {这里面放的是处理完所有的行后要执行的语句 }'
简单的awk脚本可以放在单引号或双引号中:
awk 'BEGIN { statements } { statements } END { end statements }' 
或者
awk "BEGIN { statements } { statements } END { end statements }" 

awk命令也可以从stdin中读取输入。
awk脚本通常由3部分组成:BEGIN、END和带模式匹配选项的公共语句块(common statement block)。这3个部分都是可选的,可以不用出现在脚本中。
awk命令的工作方式如下。
(1) 首先执行BEGIN { commands } 语句块中的语句。
(2) 接着从文件或stdin中读取一行,如果能够匹配pattern,则执行随后的commands语句块。重复这个过程,直到文件全部被读取完毕。
(3) 当读至输入流末尾时,执行END { commands } 语句块。

awk '{if(NR==10){print $0}}是判断如果当前行的行号是10,则输出该行的。

以下是awk可以使用的一些特殊变量。
 NR:表示记录编号,当awk将行作为记录时,该变量相当于当前行号。
 NF:表示字段数量,在处理当前记录时,相当于字段数量。默认的字段分隔符是空格。
 $0:该变量包含当前记录的文本内容。
 $1:该变量包含第一个字段的文本内容。
 $2:该变量包含第二个字段的文本内容
 RS:该变量记录分隔符(默认是一个换行符)

$ echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | \
awk '{
 print "Line no:"NR",No of fields:"NF, "$0="$0,
 "$1="$1,"$2="$2,"$3="$3
}'
Line no:1,No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3 
Line no:2,No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5 
Line no:3,No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7 

你可能感兴趣的:(leetcode)