wc -l file.txt
输出行数和文件名。
我只需要数字本身(不是文件名)。
我可以这样做
wc -l file.txt | awk '{print $1}'
但也许有更好的方法?
答案 0 :(得分:166)
尝试这种方式:
wc -l < file.txt
答案 1 :(得分:19)
cat file.txt | wc -l
根据the man page(对于BSD版本,我没有要检查的GNU版本):
如果未指定文件,则使用标准输入而不使用文件 名字是 显示。提示将接受输入,直到收到EOF或[^ D] 大多数环境。
答案 2 :(得分:12)
要在没有前导空格的情况下执行此操作,为什么不:
wc -l < file.txt | bc
答案 3 :(得分:11)
怎么样
wc -l file.txt | cut -d' ' -f1
即。将wc
的输出传递给cut
(其中分隔符是空格,只选择第一个字段)
答案 4 :(得分:4)
怎么样
grep -ch "^" file.txt
答案 5 :(得分:3)
我遇到类似的问题,试图在没有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`
,这是另一个巧妙的技巧)。
答案 6 :(得分:2)
显然,有很多解决方案。 以下是另一个:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
这只会输出行数,但会显示尾随换行符(\n
),如果您不想要,请将[:blank:]
替换为[:space:]
。
答案 7 :(得分:1)
最好的办法是首先查找目录中的所有文件,然后使用AWK NR(记录变量数)
下面是命令:
find <directory path> -type f | awk 'END{print NR}'
示例: - find /tmp/ -type f | awk 'END{print NR}'
答案 8 :(得分:0)
这对我有用,它使用普通的wc -l
和sed
去除任何不是数字的字符。
wc -l big_file.log | sed -E "s/([a-z\-\_\.]|[[:space:]]*)//g"
# 9249133