head: 非法选项 -- q

head: illegal option -- q

尝试计算目录中 csv 文件的列数,使用:head -n 1 *.csv | awk -F, '{print NF}'

结果有很多零,因为head首先打印文件名。尝试过 head -q -n 1 *.csv,它通常适用于标准 Linux 服务器,但在这里(本地 Mac)我得到:

head: illegal option -- q
usage: head [-n lines | -c bytes] [file ...]

有趣的是,在 man head 中,我什至不认为 -q 是一个有效的论点。

有什么想法吗?

那是因为它不是一个合法的论点。

POSIX 标准详细说明了哪些命令行标志对于关键程序(如 head、tail 和大部分 binutils)是必需的,并且 GNU 组织偶尔会添加超出标准的额外标志。

这是一个额外的“-q”静默标志,它不是 POSIX 标准的一部分,而是 GNU 产品的一部分,而您已经进入了一个不使用 GNU 产品的平台公用事业。

我建议你只围绕它编写脚本,或者使用 grep 等管道只保留你需要的行。

其他人已经在另一个答案中解释了为什么它不起作用。这是一个可移植的解决方法:

awk -F, 'FNR==1 {print NF}' *.csv