如何在不使用编辑器或查看器应用程序打开文件的情况下找到文本文件包含的行数?有没有方便的 Unix 控制台命令来查看号码?
答案1
确实有。我相信,它最初被称为wc
,最初是为了字数统计,但它可以计算行、单词、字符、字节(在某些实现中,可以计算最长行的字节长度或最宽行的显示宽度)。该-l
选项告诉它计算行数(实际上,它计算换行符,因此仅计算正确分隔的行):
wc -l mytextfile
或者只输出行数:
wc -l < mytextfile
(请注意,某些实现会在该数字之前插入空格)。
答案2
另一种选择是使用来grep
查找模式匹配的次数:
grep --regexp="$" --count /path/to/myfile.txt
在这个例子中,
$
是一个计算结果为新行的表达式(按下输入按钮)--count
抑制匹配的正常输出,并显示匹配的次数。- 这
/path/to/myfile.txt
是非常明显的,我希望:)
编辑:正如 @hesse 在评论中提到的,这可以缩短为
grep -c $ path/to/file
这也将使其成为标准并可移植到非 GNUgrep
实现。
答案3
awk
我还想补充一点,如果您出于某种原因不想使用wc
.pure ,那么以 pure 方式执行此操作非常容易。
$ awk 'END { print NR }' /path/to/file
上面的s 是文件中存在的print
记录数 ( ) 。NR
/path/to/file
笔记:与 不同wc
,这不会打印文件名。因此,如果您只想要数字,这将是一个很好的替代方案cat file | wc -l
。
答案4
根据我的测试,我可以验证 AWK 比其他工具(GREP、SED、AWK、PERL、WC)快得多
这是我在这里运行的测试的结果
date +%x_%H:%M:%S; grep -c $ my_file.txt; date +%x_%H:%M:%S;
10/03/16_09:41:51 24579427 10/03/16_09:42:40 ~49 秒
date +%x_%H:%M:%S; wc -l my_file.txt; date +%x_%H:%M:%S;
10/03/16_09:35:05 24579427 my_file.txt 10/03/16_09:35:45 ~40 秒
date +%x_%H:%M:%S; sed -n '$=' my_file.txt; date +%x_%H:%M:%S;
10/03/16_09:33:50 24579427 10/03/16_09:34:29 ~39 秒
date +%x_%H:%M:%S; perl -ne 'END { $_=$.;if(!/^[0-9]+$/){$_=0;};print "$_" }' my_file.txt; date +%x_%H:%M:%S;
10/03/16_09:36:11 24579427 10/03/16_09:36:36 ~25 秒
date +%x_%H:%M:%S; awk 'END { print NR }' my_file.txt; date
+%x_%H:%M:%S;
10/03/16_09:43:36 24579427 10/03/16_09:43:58 ~22 秒