我想用awk. 是否可以执行以下任务:
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
Run Code Online (Sandbox Code Playgroud)
如何显示行号 122 到 129 的详细信息?
zra*_*ajm 45
你还没有理解它是如何awk工作的。指定的“程序”始终为输入的每一行(或 awk 用语中的“记录”)执行一次,不需要FOR或任何类似的构造。只需使用:
详细方法
ls -l | awk 'NR>=122 && NR<=129 { print }'
Run Code Online (Sandbox Code Playgroud)
更紧凑的方法
ls -l | awk 'NR==122,NR==129'
Run Code Online (Sandbox Code Playgroud)
这给出了一个范围NR,即“数字记录”,通常这是当前awk正在处理的行。
gho*_*oti 11
另一种替代方法是使用sed:
ls -l | sed -ne '122,129p'
Run Code Online (Sandbox Code Playgroud)
但是,如果正如您的问题所暗示的那样,为此使用 awk 很重要,请使用 manatwork 对 Zrajm 答案的评论。正如 awk 的文档所述:
Run Code Online (Sandbox Code Playgroud)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/'
Run Code Online (Sandbox Code Playgroud)
这将从第 122 行开始输出,并一直持续到包含单词“foobar”的一行。
如果您告诉我们实际用例,我们或许能够帮助提供更好解决方案的答案。我担心这听起来像是XY 问题。