You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UNIX:统计多个带表头文件总行数时仅减一个表头的问题排查

问题分析与解决方法

你的两个命令为啥出错?

  • sed '1d' IN-Pass-30* | wc -l:sed默认会把所有输入文件当成一个连续的数据流处理,1d只会删除整个流的第一行(也就是第一个文件的表头),其他文件的表头根本没被删掉,所以统计结果只少了一行。
  • awk 'END {print NR-1}' IN-Pass-30*:NR是所有文件的总行数总和,你只减了1,但每个文件都有一个表头,实际要减去的是文件的总数,不是1,结果自然不对。

正确的命令写法

方法1:用sed处理每个文件的第一行

加上-s参数(让sed把每个文件当作独立输入),这样每个文件的第一行都会被删除:

sed -s '1d' IN-Pass-30* | wc -l

方法2:用awk精确计数

用FNR(当前处理文件的行号)判断,只统计每个文件从第二行开始的内容:

awk 'FNR > 1 {count++} END {print count}' IN-Pass-30*

或者直接用总行数减去文件个数(ARGC-1是文件的数量,因为ARGC包含awk命令本身):

awk 'END {print NR - (ARGC - 1)}' IN-Pass-30*

内容的提问来源于stack exchange,提问作者noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:31:03