如何打印文本文件每行中的字符数

我想用unix命令打印文本文件每行的字符数。 我知道这是简单的PowerShell

gc abc.txt | % {$_.length} 

但我需要unix命令。

使用Awk。

 awk '{ print length($0); }' abc.txt 
 while read -r line; do echo ${#line}; done < abc.txt 

这是POSIX,所以它应该到处工作。

编辑:添加-rbuild议由威廉。

这里是使用xargs例子:

 $ xargs -I% sh -c 'echo % | wc -c' < file 

我已经尝试了上面列出的其他答案,但是在处理大文件时,这些解决scheme还不是很好,特别是一行的大小占用了大约1/4的可用内存。

bash和awk都浑浊了整个行,​​即使这个问题不需要。 即使有足够的内存,Bash也会在线路太长时出错。

我已经实现了一个非常简单的,相当未优化的python脚本,当用大文件(每行大约4 GB)进行testing时,不会嗤之以鼻,而且是比给定的更好的解决scheme。

如果这是生产时间关键的代码,那么在testing这确实是一个瓶颈之后,您可以用C重写这些想法,或者对读取调用执行更好的优化(而不是一次只读取一个字节)。

代码假设换行符是一个换行字符,这对Unix来说是一个很好的假设,但是在Mac OS / Windows上是YMMV。 确保文件以换行结束,以确保不会忽略最后一行字符数。

 from sys import stdin, exit counter = 0 while True: byte = stdin.buffer.read(1) counter += 1 if not byte: exit() if byte == b'\x0a': print(counter-1) counter = 0 

尝试这个:

 while read line do echo -e |wc -m done <abc.txt