awk通过nr和nf变量可统计文件总行数与列数:end块中print nr得总行数;nr==1时print nf得首行列数;遍历更新max=nf后end输出lines: nr maxcols: max。

用 awk 打印文件的总行数和列数,关键在于理解两个内置变量:NR(当前处理的总行号,即总行数)和 NF(当前行的字段数,即列数)。注意:列数是按行统计的,不同行可能列数不同,所以通常需结合逻辑判断是否取最大值、最小值或某一行的值。
打印总行数(最常用)
NR 在处理完最后一行后等于文件总行数,因此在 END 块中直接输出即可:
-
awk 'END {print NR}' filename—— 输出文件总行数,不含空行也计入 - 等效于
wc -l filename | awk '{print $1}',但更轻量、不依赖 wc
打印某一行的列数(例如第一行)
NF 只反映当前行的字段数。若想看首行列数,可用:
-
awk 'NR==1 {print NF; exit}' filename—— 读到第 1 行就输出其列数并退出 -
awk 'FNR==1 {print NF; exit}' filename—— FNR 更安全,多文件时也可靠
打印每行的列数(用于检查格式一致性)
适合排查 CSV 或日志中字段错位问题:
-
awk '{print NR, NF}' filename—— 每行输出“行号 列数” -
awk '{if (NF != 3) print NR ": expected 3, got " NF}' data.csv—— 找出列数异常的行
同时打印总行数和最大列数
如果需要整体统计,可边读边记录最大列数:
awk '{max = (NF > max ? NF : max)} END {print "Lines:", NR, "MaxCols:", max}' filename- 该命令遍历所有行,更新 max 值,最后输出总行数和最多列数











