awk 打印条件

Har*_*thi 2 awk

调试别人写的文件时,发现一行

psql -U user -h $2 -p 5432 mydb -c "set search_path=$3;$4" | awk 'NR>3 {print l} {l=$0}'
Run Code Online (Sandbox Code Playgroud)

我不知道什么

awk 'NR>3 {print l} {l=$0}' 
Run Code Online (Sandbox Code Playgroud)

这条线实际上是做什么的。谁能解释一下这条线是什么意思?{print l}

Sun*_*eep 7

一个更简单的输入来解释命令:

$ seq 6 | awk 'NR>3 {print l} {l=$0}'
3
4
5
Run Code Online (Sandbox Code Playgroud)
  • NR 是一个特殊变量,它具有当前记录号的值(在这种情况下与行号相同)
    • 所以NR>3意味着行号大于 3
  • {l=$0}这是将当前行(特殊变量$0)的内容保存到用户定义的变量l
  • NR>3 {print l} 当条件为真时,打印变量的内容 l

因此,有效地,此代码打印输入中除前两行和最后一行之外的所有行。

  • 当然,你永远不应该使用字母 `l` 作为变量名,因为它看起来太像数字 `1` 并且会混淆代码。 (3认同)