【问题标题】:How to select the nth line of a file from a variable in bash?如何从bash中的变量中选择文件的第n行?
【发布时间】:2014-05-02 16:34:05
【问题描述】:

可能重复:Bash tool to get nth line from a file

我需要选择文件的第 n 行,这一行定义为变量 PBS_ARRAYID

另一个问题(上面的链接)中的接受解决方案是:

sed 'NUMq;d' job_params

我正在尝试适应这样的变量(实际上我尝试了很多东西,但更有意义的那个):

sed "${PBS_ARRAYID}q;d" job_params

但我收到以下错误:

sed: -e expression #1, char 2: invalid usage of line address 0

我做错了什么?

【问题讨论】:

  • 显然,您做错了什么是试图提取文件的第 0 行。 sed 认为第一行是第 1 行。
  • 谢谢!我不知道

标签: bash sed environment-variables


【解决方案1】:

这是一个awk 示例。

假设我们有这个文件:

cat file
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

然后我们有这些变量:
var="four"
number=2

然后这个awk 给出:

awk '$0~v {f=NR} f && f+n==NR' v="$var" n="$number" file
6 six

【讨论】:

  • 我看不懂脚本,结果不是预期的。无论哪种方式,另一个问题的解决方案都绝对有效,问题是我从第零行开始,这在sed 中显然是无效的
  • 如果您发布一些数据,以及预期的结果,我们会更容易帮助和理解。
  • @rici 已经在 cmets 上解决了这个问题,我期待他的回答,所以我可以接受。我引用的另一个问题中有数据,也是问题中的有效解决方案(唯一的问题是参数)
【解决方案2】:

你的解决方案是正确的:

sed "${PBS_ARRAYID}q;d" job_params

唯一的问题是sed 认为第一行是第 1 行(感谢 rici),所以 PBS_ARRAYID 必须在 [1,X] 范围内,其中 X 是输入文件的行数,或者:

wc -l job_params

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2021-12-19
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多