我添加了一个 git 别名,以提供我历史记录中特定文件的行数:
[alias]
lines = !lc() { git ls-files -z ${1} | xargs -0 wc -l; }; lc
Run Code Online (Sandbox Code Playgroud)
但是,wc -l正在报告多个总数,如果我有超过 10 万行,它会报告它们的总数,然后继续。下面是一个例子:
$ 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
Run Code Online (Sandbox Code Playgroud)
grep "total")$ git lines \*.cs | grep "total"
123569 total
107700 total
134796 total
111411 total
44600 total
Run Code Online (Sandbox Code Playgroud)
如何从 中获得真正的总计wc -l,而不是一系列小计?
我有一个像这样的 CSV 文件:
abd,123,egypt,78
cde,456,england,45
Run Code Online (Sandbox Code Playgroud)
如何获得仅第 3 列单词的字符数?
我不知道如何wc做到这一点。
如何使用字计数器 ( wc) 和管道来计算目录中有多少文件或/usr/bin目录?
我有一个文件末尾有空行的文件。我可以使用grep在脚本中作为变量传递的文件名来计算文件末尾的空行数吗?
偶然地,我发现这wc取决于它如何从 bash 获取输入的不同:
$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5
Run Code Online (Sandbox Code Playgroud)
这是 - 恕我直言令人困惑 - 行为记录在某处吗?wc这里算什么- 这是一个假定的换行符吗?
这是问题,我想计算我在 hpc 中的作业数量,但这不是现成的功能之一。所以我做了这个简单的脚本
squeue -u user_name | wc -l
Run Code Online (Sandbox Code Playgroud)
wheresqueue打印所有作业,如下所示
> squeue -u user_name
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
8840441 theory cteq fxm PD 0:00 1 (Resources)
8840442 theory cteq fxm PD 0:00 1 (Priority)
8840443 theory cteq fxm PD 0:00 1 (Priority)
8840444 theory cteq fxm PD 0:00 1 (Priority)
Run Code Online (Sandbox Code Playgroud)
这将被输送到wc并计算行数。但是,第一行不是作业的条目。wc计数时如何指示跳过第一行?或者我应该只取wc减一的输出?
提前致谢!
我有一个很大的文本文件(gz 后约 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
Run Code Online (Sandbox Code Playgroud)
每条记录的第一行都以@.
编辑2:
zcat file > /dev/null 需要 31 分钟。
EDIT3:
只有第一行以@. 其他人都不会。见这里。记录需要保持有序。在生成的文件中添加任何内容都是不行的。
我想在 diff 的输出中获得正确的行数(特别是使用-y和--suppress-common-lines选项)。使用简单的wc -l做不工作,因为如果这两个文件没有结束换行符和他们的最后一行是不同的wc -l将不计入最后一行。
有没有简单有效的解决方案来避免这种情况?
例如,如果您有文件“a”:
a
b
c
d #no newline here
Run Code Online (Sandbox Code Playgroud)
和“b”:
a
b
c
D #no newline here
Run Code Online (Sandbox Code Playgroud)
输出是:
$ diff -y --suppress-common-lines a b | wc -l
0
Run Code Online (Sandbox Code Playgroud)
这显然是不正确的,因为diff 确实输出了一行。
cat > file
Amy looked at her watch. He was late. The sun was setting but Jake didn’t care.
wc file
1 16 82 file
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么wc命令在这种情况下返回 3 个额外的字符吗?