【问题标题】:How to read n-th line from a text file in bash?如何从bash中的文本文件中读取第n行?
【发布时间】:2014-11-21 08:19:08
【问题描述】:

假设我有一个名为“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 行,但不知道如何读取它。我也知道“读取”命令,但不知道如何在某行中使用它。

提前感谢您的帮助。

【问题讨论】:

标签: linux bash file


【解决方案1】:

使用headtail

$ 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 的建议。

【讨论】:

  • 你需要输出到变量吗?
  • 您的答案中唯一缺少的工具是awk,为了完整起见,可能添加awk -v line=$line 'NR==line'
  • @FredrikPihl 感谢您的建议。包含在答案中:)
  • 无论如何要像使用“读取”一样将其读取为数组?例如,我想要 ${line[0]}=5 和 ${line[1]}=6 等等...
  • @user3206874 你的意思是让输出到一个数组,以便将命令包装在() 中,如content=( $(sed -n "$line p" input) )。现在${content[0]} 是 5 ${content[1]} 是 6
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多