NF 是 awk 中表示当前行字段数量的只读内置变量,自动按字段分隔符切分并统计列数,值随行变化,不可赋值,空行时为 0。

在 awk 中,NF 是一个内置变量,代表当前记录(默认按换行符分割)中字段(列)的数量。它会自动根据字段分隔符(默认为空格/制表符等空白字符)对当前行进行切分后统计字段个数,无需手动计算。
NF 的基本用法
NF 在每行处理开始时自动更新,反映该行实际字段数。例如:
echo -e "a b c\nx y\np q r s" | awk '{print NF}'
输出:
3
2
4
说明:第一行 3 列,第二行 2 列,第三行 4 列 —— NF 精确反映每行的列数。
结合条件判断筛选特定列数的行
可利用 NF 进行行过滤,比如只处理恰好 5 列的数据:
- awk 'NF == 5 {print $0}' data.txt —— 输出所有含 5 列的行
- awk 'NF > 3 {print $1, $NF}' data.txt —— 输出列数大于 3 的行中首列和末列
- awk 'NF {print "行号:" NR ", 列数:" NF}' data.txt —— 非空行才打印(NF 为 0 表示空行或全由分隔符组成的行)
注意字段分隔符对 NF 的影响
NF 的值依赖于当前生效的字段分隔符(FS)。默认 FS=" \t\n"(多个空白符视为单一分隔),但可通过 -F 或 FS 修改:
- echo "a,b,c" | awk -F',' '{print NF}' → 输出 3
- echo "a|b||c" | awk -F'|' '{print NF}' → 输出 4(空字段也计入,即 a、b、空、c)
- echo "a,b,c," | awk -F',' '{print NF}' → 输出 4(末尾逗号产生一个空字段)
常见误区提醒
NF 是只读变量,不能赋值(如 NF=2 会报错);它不表示文件总列数,而是当前行的字段总数;若某行全是空白或被分隔符完全包围,NF 为 0,此时 $1、$2 等均为空字符串。











