给定一个文本文件 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
说明:
来源:力扣(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