Questions tagged «wc»

wc实用程序计算文件或标准输入的换行符,字和字节。



17
如何找到最少字符的行
我正在使用任何常规UNIX命令编写Shell脚本。我必须检索具有最少字符(包括空格)的行。最多可以有20条线。 我知道我可以head -$L | tail -1 | wc -m用来查找第L行的字符数。问题是,我想到的唯一方法是使用手动编写一堆if语句,比较值的方法。 示例数据: seven/7 4for 8 eight? five! 4for由于该行的字符最少,将返回。 在我的情况下,如果多行的长度最短,则应返回一行。只要选择最小长度,就无关紧要。但是我看不到在其他情况下向其他用户显示两种方式的危害。


2
为什么wc这么慢?
为什么wc实用程序这么慢? 当我在一个大文件上运行它时,它花费的时间比md5sum长20倍: MyDesktop:/tmp$ dd if=/dev/zero bs=1024k count=1024 of=/tmp/bigfile 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 0.687094 s, 1.6 GB/s MyDesktop:/tmp$ time wc /tmp/bigfile 0 0 1073741824 /tmp/bigfile real 0m45.969s user 0m45.424s sys 0m0.424s MyDesktop:/tmp$ time md5sum /tmp/bigfile cd573cfaace07e7949bc0c46028904ff /tmp/bigfile real 0m2.520s user 0m2.196s sys 0m0.316s 这不仅是由于文件中充满了空值而导致的一种奇怪的边缘情况,即使文件中填充了随机数据或文本文件,我也看到了相同的性能差异。 …
17 performance  wc 



4
我如何用`wc -l`获得单行?
我添加了一个git别名,以提供历史记录中特定文件的行数: [alias] lines = !lc() { git ls-files -z ${1} | xargs -0 wc -l; }; lc 但是,wc -l报告的是多个总计,因此,如果我有超过10万行,它将报告它们的总计,然后继续。这是一个例子: <100k线(所需输出) $ git lines \*.xslt 46 packages/NUnit-2.5.10.11092/doc/files/Summary.xslt 232 packages/NUnit-2.5.10.11092/samples/csharp/_UpgradeReport_Files/UpgradeReport.xslt 278 total > 100k行(必须通过管道传输到grep "total") $ git lines \*.cs | grep "total" 123569 total 107700 total 134796 total 111411 total 44600 total …
12 files  xargs  wc 


2
为什么wc -m和wc -c不同?
作为一名C程序员,我很惊讶地发现wc -c(它计算字节数)和wc -m(它计算字符数)对于我的一个长文本文件输出的结果截然不同。我一直被告知那sizeof(char)是1个字节。 qdii@nomada ~/Documents $ wc -c sentences.csv 102990983 sentences.csv qdii@nomada ~/Documents $ wc -m sentences.csv 89023123 sentences.csv 有什么解释吗?




7
如何在不分割多行记录的情况下有效地分割大型文本文件?
我有一个大的文本文件(gz'ed时为〜50Gb)。该文件包含4*N行或N记录;即每条记录由4行组成。我想将此文件拆分为4个较小的文件,每个文件的大小约为输入文件的25%。如何在记录边界分割文件? 天真的方法是zcat file | wc -l获取行数,将其除以4,然后使用split -l <number> file。但是,这会翻遍文件两次,并且行计数非常慢(36分钟)。有没有更好的办法? 这很接近,但不是我想要的。接受的答案也会进行行计数。 编辑: 该文件包含fastq格式的测序数据。两条记录如下所示(匿名): @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTTTATGTTTTTAATTAATTCTGTTTCCTCAGATTGATGATGAAGTTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFFFFFFFFFAFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF<AFFFFFFFFFFAFFFFFFFFFFFFFFFFFFF<FFFFFFFFFAFFFAFFAFFAFFFFFFFFAFFFFFFAAFFF<FAFAFFFFA @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCCCTCTGCTGGAACTGACACGCAGACATTCAGCGGCTCCGCCGCCxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFF7FFFFFFAFFFFA#F7FFFFFFFFF7FFFFFAF<FFFFFFFFFFFFFFAFFF.F.FFFFF.FAFFF.FFFFFFFFFFFFFF.)F.FFA))FFF7)F7F<.FFFF.FFF7FF<.FFA<7FA.<.7FF.FFFAFF 每条记录的第一行以开头@。 编辑2: zcat file > /dev/null 需要31分钟。 EDIT3: Onlye第一行以开头@。其他任何人都不会。看这里。记录需要保持秩序。向结果文件中添加任何内容都是不正确的。

3
在差异输出中获取正确的行数
我想在diff的输出中获得正确的行数(特别是-yand --suppress-common-lines选项)。使用简单的wc -l做不工作,因为如果这两个文件没有结束换行符和他们的最后一行是不同的wc -l将不计入最后一行。 有没有简单有效的解决方案来避免这种情况? 例如,如果您有文件“ a”: a b c d #no newline here 和“ b”: a b c D #no newline here 输出为: $ diff -y --suppress-common-lines a b | wc -l 0 这显然是不正确的,因为diff 会输出一行。
8 diff  wc 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.