wc -l file.txt
输出行数和文件名。
我只需要行数本身(不需要文件名)。
我可以做到这一点。
wc -l file.txt | awk '{print $1}'
也许有更好的方式?
尝试这种方法:
wc -l < file.txt
wc -l
不应该发出一个空格,为什么ksh会在程序的标准输出前加上一个空格? - Peter - Reinstate Monica<
这个符号是做什么用的? - mbjcat file.txt | wc -l
根据man手册(BSD版本,我没有GNU版本可以参考):
如果未指定文件,则使用标准输入,并且不显示文件名。提示符将接受输入,直到接收到EOF或在大多数环境中为[^D]。
wc -l < file.txt
具有相同的效果。 - pjmorse如果不想产生前导空格,为什么不尝试这样做:
wc -l < file.txt | bc
wc -l < file.txt
来修复解析错误并去掉空格:wc -l < file.txt | bc
。 - jangosteve我曾经遇到一个类似的问题,尝试获取没有wc
提供的前导空格的字符计数,这使我来到这个页面。在尝试了这里的答案之后,以下是我在Mac(BSD Bash)上进行个人测试的结果。同样,这是用于字符计数;如果要计算行数,则需要使用wc -l
。 echo -n
省略尾随的换行符。
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
总的来说,我不会依靠cut -f*
方法,因为它需要您知道任何给定输出具有的精确前导空格数量。而grep
方法适用于计算行数,但不适用于字符。
bc
是最简洁的,而awk
和perl
稍微有些过度,但它们都应该相对快速并且足够可移植。
此外,请注意,某些方法可以调整以修剪通用字符串周围的空白(还有echo `echo $FOO`
,这是另一个很棒的技巧)。
echo \
echo $FOO`;` 也像一个 String.trim() 命令一样作用于变量!太方便了。我也会把你的代码添加到我的回答中。 - Beejor怎么样
wc -l file.txt | cut -d' ' -f1
即将 wc
命令的输出导入到 cut
命令中(使用空格作为分隔符,并选择第一个字段)。wc -l file.txt | awk '{print $1}'
更好。 - doubleDownwc -l < file.txt
方法更快。但在 BSD 上必须使用 | cut -d' ' -f2
,只要 wc
命令返回一个前导空格,例如:" 34068289 file.txt",而不是 "34068289 file.txt"。 - Sopalajo de Arrierez你能行吗?
grep -ch "^" file.txt
很明显,此问题有许多解决方案。以下是另一种解决方案:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
这只会输出行数,但末尾换行符 (\n
) 仍存在。如果您不想要它,请将 [:blank:]
更改为 [:space:]
。
test9
,其中只有1行内容,输出将为19。 - Raphael Ahrens另一种在不调用外部命令的情况下去除前导零的方法是使用算术扩展$((exp))
echo $(($(wc -l < file.txt)))
最好的方法首先是找到目录中的所有文件,然后使用 AWK NR(记录变量数量)
以下是命令:
find <directory path> -type f | awk 'END{print NR}'
示例:- find /tmp/ -type f | awk 'END{print NR}'
这对我来说可行,使用普通的wc -l
和sed
来去除任何不是数字的字符。
wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g"
# 9249133
wc -l < file.txt
这个命令可以精确而简洁地完成任务。 - Jonathan Lefflerwc
(wc -l *.txt
),这样您将为每个文件获取一行并需要加以区分。 - Kaligule