wc -l file.txt
输出行数和文件名。
我只需要数字本身(而不是文件名)。
我可以这样做
wc -l file.txt | awk '{print $1}'
但也许有更好的办法?
wc -l file.txt
输出行数和文件名。
我只需要数字本身(而不是文件名)。
我可以这样做
wc -l file.txt | awk '{print $1}'
但也许有更好的办法?
当前回答
如果不使用前导空格,为什么不这样做呢:
wc -l < file.txt | bc
其他回答
cat file.txt | wc -l
根据手册页(对于BSD版本,我没有GNU版本来检查):
如果没有指定文件,则使用标准输入,不使用文件 的名字是 显示出来。提示符将接受输入,直到接收到EOF或[^D] in 大多数环境。
试试这个方法:
wc -l < file.txt
不调用外部命令而去掉前导零的另一种方法是使用算术展开$((exp))
echo $(($(wc -l < file.txt)))
技术比较
在没有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 ',另一个巧妙的技巧)。
如何
grep -ch "^" file.txt