wc -l file.txt
输出行数和文件名。
我只需要数字本身(而不是文件名)。
我可以做这个
wc -l file.txt | awk '{print $1}'
但是也许有更好的方法?
wc -l file.txt
输出行数和文件名。
我只需要数字本身(而不是文件名)。
我可以做这个
wc -l file.txt | awk '{print $1}'
但是也许有更好的方法?
Answers:
尝试这种方式:
wc -l < file.txt
wc -l
不应该发出一个,为什么ksh在程序的标准输出前加上空格?
4711 [stdin]
输出类似。
printf "%'d"
,这样可以节省空间并很好地打印出大量数字。
cat file.txt | wc -l
根据手册页(对于BSD版本,我没有要检查的GNU版本):
如果未指定文件,则使用标准输入,并且不显示文件名。该提示将接受输入,直到接收到EOF为止,或者在大多数环境中为[^ D]。
wc -l < file.txt
具有相同的效果。
wc -l < file.txt
以避免猫的无用。尽管如果您认为那会浪费任何明显的时间,那绝对是疯了。
要在没有领先空间的情况下执行此操作,为什么不这样做:
wc -l < file.txt | bc
wc -l < file.txt
以解决解析错误并删除空格:wc -l < file.txt | bc
怎么样
wc -l file.txt | cut -d' ' -f1
即,将输出的内容wc
输入到cut
(其中分隔符为空格并仅选择第一个字段)
wc -l file.txt | awk '{print $1}'
OP尝试的要好。
wc -l < file.txt
方法快。但是必须| cut -d' ' -f2
在BSD上使用,只要该wc
命令返回一个前导空格,例如:“ 34068289 file.txt”,而不是“ 34068289 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`
另一个巧妙的技巧)。
echo $(printf '%s' "$FOO" | wc -c)
是echo
使用命令替换不是没有用的罕见情况之一。
echo `echo $FOO`;
也像对变量使用String.trim()命令一样!非常方便。我还将您的行添加到我的答案中。
printf
比这更好echo
?
显然,有很多解决方案。这是另外一个:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
这只会输出行数,但是会出现尾随换行符(\n
),如果您不希望使用任一行,请替换[:blank:]
为[:space:]
。
test9
在它1线,输出将是19
wc -l < file.txt
准确,简洁地完成工作。