有没有办法获得wc在bash中返回的整数?
基本上我想在文件名之后将行号和字数写入屏幕.
output: filename linecount wordcount
这是我到目前为止:
files=`ls` for f in $files; do if [ ! -d $f ] #only print out information about files !directories then # some way of getting the wc integers into shell variables and then printing them echo "$f $lines $ words" fi done
最简单的回答:
wc < filename
只是:
wc -l < file_name
会做的.但是这个输出包括前缀空格,wc
右对齐数字.
wc $file | awk {'print "$4" "$2" "$1"'}
根据您的布局进行调整.
使用正逻辑("是文件")而不是负面("不是目录")也更好
[ -f $file ] && wc $file | awk {'print "$4" "$2" "$1"'}
您可以使用该cut
命令获取wc
输出的第一个单词(行或单词计数):
lines=`wc -l $f | cut -f1 -d' '` words=`wc -w $f | cut -f1 -d' '`
有时wc在不同平台上以不同格式输出.例如:
在OS X中:
$ echo aa | wc -l 1
在Centos:
$ echo aa | wc -l 1
因此,仅使用剪切可能无法检索数字.而是尝试tr删除空格字符:
$ echo aa | wc -l | tr -d ' '
接受/流行的答案不适用于OSX.
以下任何一个都应该可以在bsd和linux上移植.
wc -l < "$f" | tr -d ' '
要么
wc -l "$f" | tr -s ' ' | cut -d ' ' -f 2
要么
wc -l "$f" | awk '{print $1}'
如果将文件名重定向到wc
它,则省略输出文件名.
击:
read lines words characters <<< $(wc < filename)
要么
read lines words characters <而不是使用
for
迭代输出ls
,执行此操作:for f in *如果有包含空格的文件名,它将起作用.
如果你不能使用globbing,你应该管道
while read
循环:find ... | while read -r f或使用过程替代
while read -r f do something done < <(find ...)