如何检查\t
文件第一行中有多少个空格(' ', )?
答案1
一种简单的方法是仅选择第一行,从中删除非空白字符,然后计算剩下的字符数:
head -n 1 | tr -cd ' \t' | wc -c
答案2
awk '{print gsub("[ \t]",""); exit}' < file
或者计算任何空白(水平间距字符),而不仅仅是空格和制表符:
awk '{print gsub("[[:blank:]]",""); exit}' < file
答案3
您可以使用 GNU sed 来替换head|tr
组合(这里假设 POSIXLY_CORRECT 不在环境中):
sed '1s/[^ \t]//g' |wc -c
笔记:sed 总是会打印出换行符,所以您将包括换行符本身的计数。 这是如何运作的:在sed中,你可以给s///
命令一个地址范围,这里只是第一行。全局将所有非空白替换为 nul 并输出wc
计数字符的结果。
找出一个进行计数的纯 sed 版本是可能的,但很丑陋。
Perl 版本也很简单:
perl -lne 's/[^ \t]//g;print length($_);last'
原理是一样的。该-l
选项输出尾随换行符。该-n
选项将脚本包装在一个巨大的 while-readline 循环中。并last
终止该循环。
Stéphane 的awk
解决方案提醒我你也可以使用 perl 来做到这一点:
perl -lne 'print s/[[:space:]]]//g;last'
或者将其替换为[[:blank:]]
包含换行符和其他非打印字符。
答案4
perl -nE '$n = tr/ / /; say $n; exit' file