[英]How to read n-th line from a text file in bash?
假设我有一个名为“demo.txt”的文本文件,如下所示:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
现在我想读取某一行,比如第 2 行,其命令如下所示:
Line2 = read 2 "demo.txt"
所以当我打印它时:
echo "$Line2"
我去拿:
5 6 7 8
我知道如何使用“sed”命令从文件中打印第 n 行,但不知道如何读取它。 我也知道“读取”命令,但不知道如何在某行中使用它。
在此先感谢您的帮助。
使用head
和tail
$ head -2 inputFile | tail -1
5 6 7 8
要么
一般化版本
$ line=2
$ head -"$line" input | tail -1
5 6 7 8
使用sed
$ sed -n '2 p' input
5 6 7 8
$ sed -n "$line p" input
5 6 7 8
它能做什么?
-n
禁止正常打印图案空间。
'2 p'
指定行号, 2
或( $line
为更一般), p
命令打印当前模式空间
input
输入文件
编辑
要将输出转换为某个变量,请使用一些命令替换技术。
$ content=`sed -n "$line p" input`
$ echo $content
5 6 7 8
要么
$ content=$(sed -n "$line p" input)
$ echo $content
5 6 7 8
获取bash数组的输出
$ content= ( $(sed -n "$line p" input) )
$ echo ${content[0]}
5
$ echo ${content[1]}
6
使用awk
也许awk
解决方案可能看起来像
$ awk -v line=$line 'NR==line' input
5 6 7 8
感谢Fredrik Pihl提出的建议。
Perl 对此也有方便的支持,而且它实际上是最直观的!
触发器运算符可以与行号一起使用:
$ printf "0\n1\n2\n3\n4" | perl -ne 'printf if 2 .. 4'
1
2
3
请注意,它是基于 1 的。
您还可以混合使用正则表达式:
$ printf "0\n1\nfoo\n3\n4" | perl -ne 'printf if /foo/ .. -1'
foo
3
4
( -1
指最后一行)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.