如何运行 awk 一些行数?

如何运行 awk 一些行数?

我想用 提取一些行awk。是否可以执行以下任务:

ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'

如何显示第 122 至 129 行的详细信息?

答案1

你还没有理解它是如何awk工作的。指定的“程序”是总是对输入的每一行(或 awk 术语中的“记录”)执行一次,不需要FOR或任何类似的构造。只需使用:

详细方法

ls -l | awk 'NR>=122 && NR<=129 { print }'

更紧凑的方法

ls -l | awk 'NR==122,NR==129'

这给出了 的范围NR,即“编号记录”,通常这是awk正在处理的当前行。

答案2

另一种替代方法是使用sed

ls -l | sed -ne '122,129p'

但是,如果正如您的问题所示,使用 awk 很重要,请遵循 manatwork 对 Zrajm 答案的评论。正如 awk 的文档所述:

   A  pattern  may  consist  of two patterns separated by a comma; in this
   case, the action is performed for all lines from an occurrence  of  the
   first pattern though an occurrence of the second.

所以如果你愿意的话,你还可以制定更高级的条件。例如:

ls -l | awk 'NR==122,/foobar/'

这将从第 122 行开始输出,并继续直到包含单词“foobar”的行。

如果您告诉我们实际的用例,我们也许能够帮助提供更好的解决方案。我担心这听起来像是XY问题

答案3

awk使用 coreutils执行此操作的另一种方法(尽管我更喜欢该方法):

ls -l | tail -n +122 | head -n 8

相关内容